几种常见的权限控制模式
2021-0-29
456

ACL(Access Control List)访问控制列表

最早的 ACL 是用户和权限的直接映射;但是这样存在一个问题,如果 A 用户和 B 用户存在相同的权限,那么 A 和 B 保存的其实是一样的。针对这种情况,就对这种模式做了改进。用组的形式包含管理权限,然后给用户分管理组,这也就能避免 A 用户和 B 用户都保存了相同的操作权限,其实这也就是 RBAC。 用户 <- 用户权限表 -> 操作对象/操作对象

DAC(Discretionary Access Control)自主访问控制

DAC 是基于 ACL 做的操作,简单说就是如果 A 用户拥有的权限可以分配给其他用户,不过这种模式的安全性低,不能给系统充分的数据保护,DAC 模型中用户可以将自己具备的权限分配给其它用户(程序里的操作就是根据用户 ID 筛选出权限列表,根据列表为要分配权限的用户构造出新的权限列表并保存)

DAC 是传统的 UNIX 访问控制模型,也是 Windows 文件系统的访问控制模型。

MAC(Mandatory Access Control)强制访问控制

MAC 是基于 DAC 做的一层防护。在 MAC 设计中会针对用户和控制对象做上映射标识,比如用户 A 属于一线员工,某个文件属于一级安全,也就是需要一线员工(包含一线)以上的用户才有权限访问,所以即使 A 用户把权限分配给了 B 用户(二线员工),B 用户也是无法文件一级安全的文件。

RBAC(Role-Based-Access-Control)基于角色的访问控制

上面简单的说了 rbac,rbac 是目前使用最普遍的权限控制模型,从另一种角度思考,其实 RBAC 就是针对操作权限做分类,然后分类在于用户管理。目前来说很多项目的权限都是基于角色管理而不是用户管理的。例如,管理员拥有最高权限,其次编辑角色拥有编辑功能和查看功能;浏览者只有访问查看的权限。而这背后的权限控制其实就是用户与角色和角色与权限的映射关系。 上面提到了,RBAC 权限控制其实是针对角色做的管理而非用户,如果需要对用户做定制化权限,那么就需要创建新的角色;如果要删除某个用户的权限,也是需要新建角色,然后把用户与该角色对应。

ABAC(Attribute-Based-Access-Control)基于属性的权限控制

ABAC 则是通过动态计算一个或一组属性是否满足某种条件来进行授权判断的(可以编写简单的逻辑)。属性通常来说分为四类:用户属性(如用户年龄),环境属性(如当前时间),操作属性(如读取)和对象属性(如一篇文章,又称资源属性),所以理论上能够实现非常灵活的权限控制,几乎能满足所有类型的需求。

例如规则:“允许所有班主任在上课时间自由进出校门”这条规则,其中,“班主任”是用户的角色属性,“上课时间”是环境属性,“进出”是操作属性,而“校门”就是对象属性了。

参考文章

企业管理系统前后端分离架构设计 系列一 权限模型篇