花几分钟快速了解几种常见的权限模型(ACL,RBAC,ABAC)

一:前言

权限管理 几乎应用于任何具有用户体系的系统,它旨在管理主体对象操作 ,由于其普遍性 与其存在的重要性 ,大佬们已经研究总结了很多成熟权限模型,本文意在通过对这些权限模型的分析,能够让大家对权限管理设计有个整体的认知。

二: 巨人的肩膀

ACL(访问控制列表)

用户能不能访问某个资源,通过配置一个用户能否访问控制的列表来判断,如下图所示:

适合于功能单一、权限功能明确或特性化非常明显的系统,现在常用于网络安全,用于控制网络流量和访问权限。

RBAC(基于角色的访问控制)

通过ACL我们需要给每一份主体都配置一份访问控制列表,那么有没有办法给某类具备相同权限的主体只用配一次权限集合呢?基于角色的访问控制的解决方案就是通过提前预置角色,角色绑定权限集合,后面再有同等权限的主体只需要关联该角色即可。(这个模型好像更大的分布在目前我们使用的系统中,可见它是非常好理解,也是非常适用于我们的系统里面的,适用于集中式管理的系统),也用一个图简单表示:

ABAC(基于属性的访问控制,被称为下一代权限模型)

上面两种权限模型都是静态的,绑定的权限如果发生变化必须去静态调整(当然也有哥们会犟,就是说RBAC也可以实现,因为通过程序监听可以动态改权限,这种方案当然可以,但是维护成本巨高,而且需要找到所有的符合条件的权限集合,容易漏和出错),而ABAC模型的出现意在实现动态的访问控制,它并不直接与角色/权限绑定,而是动态计算如下图所示:

属性是主体、对象或环境条件的特征。属性包含name-value对提供的信息。

主体是用户或NPE,例如发出访问请求以对对象执行操作的设备。主体被分配了一个或多个属性。在本文档中,假设主体和用户是同义词。

对象是由ABAC系统管理访问权限的系统资源,例如设备、文件、记录、表、进程、程序、网络或包含或接收信息的域。它可以是资源或请求的实体,也可以是主体可以在其上执行操作的任何东西,包括数据、应用、服务、设备和网络。

操作是主体对对象的请求执行函数。操作包括读取、写入、编辑、删除、复制、执行和修改。

策略是规则或关系的表示,在给定主体、对象和可能的环境条件的属性值的情况下,可以确定是否应允许请求的访问。

环境条件:发生访问请求的操作或情景环境。环境条件是可检测的环境特征。环境特征独立于主体或对象,可能包括当前时间、星期几、用户位置或当前威胁级别。

其中"访问控制计算"接收主体的访问请求,然后根据特定策略检查主体和对象的属性。然后"访问控制计算"确定对象可以对对象执行什么操作。

最后

本文通过极简单的描述,加上笔者可能表达能力也有限,所以把一些参考资料也附上,帮助大家理解:

ABAC

RBAC

史上最强的权限系统设计攻略(上)、基础概念、RBAC以及ABAC模型

史上最强的权限系统设计攻略(下)、ABAC在复杂场景下的实现思路

相关推荐
郑州光合科技余经理1 天前
代驾系统架构拆解:订单链路、权限组织与私有化源码交付
开发语言·后端·算法·架构·系统架构·uni-app·php
hboot1 天前
AI工程师第六课 - RAG检索增强生成
后端·langchain·llm
mldong1 天前
jeeflow:98KB 的工作流引擎长什么样
后端
程序员cxuan1 天前
速度太快了!本地可以跑 DeepSeek-V4-Flash 了
人工智能·后端·程序员
阿祖zu1 天前
芝士就是力量!开源私有化部署与 GitHub 双向同步的个人知识笔记 App
前端·后端·ios
不才不才不不才1 天前
Spring 源码系列(16): doDispatch 全流程——一次请求的主干链路
java·后端·spring
IT_陈寒1 天前
SpringBoot自动配置失效?这个隐藏配置坑了我一整晚
前端·人工智能·后端
搜狐技术产品小编20231 天前
告别“黑盒”与误判:如何用“多智能体对抗辩论”重构内容安全审核系统
后端·多agent
DantyWei1 天前
controller注册及调用时机
后端
sugar__salt1 天前
Spring 三层架构与 IoC、依赖注入完全指南
java·spring boot·后端·spring·架构·maven·intellij-idea