ACLRBAC和ABAC:权限系统设计模式
Posted 程序员爱学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACLRBAC和ABAC:权限系统设计模式相关的知识,希望对你有一定的参考价值。
ACL(Access Control List):访问权限列表
ACL用来描述权限规则或用户和权限之间关系的数据表。系统会识别用户,然后根据ACL(用户权限关系表)来判断用户是否对操作的对象(Subject)有权限。这种设计最常见的应用就是文件系统的权限设计,如微软的NTFS。
RBAC(Role Base Access Control):基于角色的权限控制
由于ACL对权限控制比较分散,不便于管理,比如无法将同一类的对象操作权限分配给同一类用户。基于这样的需求就有了RBAC,RBAC不用给用户单个分配权限,只用指向对应的角色就会有对应的权限,而且分配权限和收回权限都很方便。
如菜单权限的设计:用户与角色关联,角色与菜单关联
ABAC(Attribute Base Access Control):基于属性的权限控制
其实RBAC已经可以解决大部分的场景了。
但是当出现这样一个场景,就拿上面的例子,经理和销售的访问权限不一样。现在业务上需要一种权限,比如华东地区的销售只能看华东地区的客户信息,华北地区的销售只能看华北地区的客户信息,这个时候一般都是在用户数据表里添加一个地区的信息,在客户表里添加一个地区的信息,如果一个销售查询一个客户的时候,这个销售和这个客户的地区信息一样都是华北的,那么就可以访问,如果销售是华南的而客户是华北的就不可以访问。但是这种情况往往需求会变,比如某一天华东和华南地区销售合并,就是说华南的销售可以访问华南和华东的客户信息,程序员就炸了,代码要重新写一套业务逻辑。
这个时候就有了ABAC(基于属性的权限控制),ABAC则是通过动态计算一个或一组属性来是否满足某种条件来进行授权判断(可以编写简单的逻辑)。属性通常来说分为四类:用户属性(如用户年龄)、环境属性(如当前时间)、操作属性(如读取)和对象属性(如一篇文章,又称资源属性),所以理论上能够实现非常灵活的权限控制,几乎能满足所有类型的需求。
所以上面的例子就可以写一个规则:“华北地区销售查看华北地区客户信息”,其中华北地区销售是用户属性,查看是操作属性,华北地区客户信息是对象属性。这样一来需求变动的时候只需要修改规则就可以了。
但是ABAC是比较复杂的一种权限控制,如果规则过多计算会比较复杂且耗时,太过复杂对于问题追查也不方便。所以现在大部分还是使用的RBAC。
以上是关于ACLRBAC和ABAC:权限系统设计模式的主要内容,如果未能解决你的问题,请参考以下文章