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

一:前言

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

二: 巨人的肩膀

ACL(访问控制列表)

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

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

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

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

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

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

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

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

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

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

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

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

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

最后

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

ABAC

RBAC

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

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

相关推荐
Spider Cat 蜘蛛猫9 小时前
Springboot SSO系统设计文档
java·spring boot·后端
zyk_computer11 小时前
AI 时代,或许 Rust 比 Python 更合适
人工智能·后端·python·ai·rust·ai编程·vibe coding
雨辰AI11 小时前
SpringBoot3 项目国产化改造完整流程|从 MySQL 到人大金仓落地
java·数据库·后端·mysql·政务
GreenTea12 小时前
【Rust 2026教程:从零构建 Mini-OLAP 引擎】第 6 章 Benchmark 与优化路线图
后端
Rust语言中文社区12 小时前
【Rust日报】2026-05-14 Pyrefly v1.0 正式发布:快速的 Python 类型检查器和语言服务器
开发语言·后端·python·rust
GreenTea13 小时前
【Rust 2026教程:从零构建 Mini-OLAP 引擎】第 5 章 SQL → 逻辑计划 → 物理计划
后端
GreenTea13 小时前
【Rust 2026教程:从零构建 Mini-OLAP 引擎】第 4 章 哈希聚合:GROUP BY 的核心
后端
IT_陈寒13 小时前
Vue的v-for为什么不加key也能工作?我差点翻车
前端·人工智能·后端
GreenTea13 小时前
【Rust 2026教程:从零构建 Mini-OLAP 引擎】第 3 章 表达式系统:把 SQL 表达式变成可执行树
后端
GreenTea13 小时前
【Rust 2026教程:从零构建 Mini-OLAP 引擎】第 2 章 向量化执行:让 CPU 跑满
后端