RBAC(Role-Based Access Control)基于角色的权限访问控制是权限访问系统中业界公认的标准,与传统的权限分配方式(用户直接与权限绑定)相比,RBAC增强了扩展性,提高了效率,尤其在用户量多的场景。有了角色以后,我们只需为角色定制相应的权限,将相同权限的用户指定为同一个角色即可。
RBAC需要对系统的所有资源进行权限控制,系统资源可以简单总结为静态资源(页面,数据列)和动态资源(数据),也分别称为对象资源和数据资源。RBAC就是对系统的所有资源进行权限控制。
相关概念
用户
用户既是系统的使用者,也是系统的操作者。用户可以只有一个角色,也可以拥有多个角色,可以属于一个组也可以属于多个组,用户的权限集合包括其角色拥有的权限以及所属组拥有的权限的集合。
角色
角色表示一定数量的权限的集合,权限分配的单位与载体,目的是隔离用户与资源之间的逻辑关系。
角色是为许多拥有相似权限的用户进行的分类管理,角色具有上下级关系,可形成树状结构,父级角色的权限是自身以及子角色权限的总和。角色作为用于与权限的代理层,解耦了权限与用户的关系,所有的授权应该给与角色而不是直接分配给用户或组。
权限
权限及用户对资源可以进行的操作,比如CURD。角色与权限是一个多对多的关系。
RBAC模型的分类
目前得到普遍公认的是没过George Mason大学信息安全实验室提出的RBAC96模型,分为RBAC0、RBAC1、RBAC2、RBAC3,RBAC0是基础,相当于底层逻辑,RBAC1、RBAC2、RBAC3都是以RBAC0为基础进行的升级,在常规权限系统中,RBAC0模型就能完全满足要求。
RBAC0(Core RBAC)模型
最简单最基础的用户、角色、权限模型,包含了一个角色多个用户关系以及多个用户对应多个角色的关系。
在系统功能单一,使用人员较少,岗位分工,权限相对清晰的情况,可以考虑使用一个角色对应多个用户权限模型,其余情况尽量使用用户角色多对多的模型。例如,李四既是人事,同事也负责行政相关事务,那么李四就有两个角色所拥有的权限。
RBAC1(Hierarchal RBAC)模型
相比于RBAC0模型,RBAC1模型增加了子角色,引入了角色继承的概念,子角色继承父角色所有的权限。
在角色继承关系中分为一般继承关系和受限继承关系
一般继承关系是指角色继承关系是一个绝对偏序关系,允许角色之间的多继承。
受限继承关系则要求角色继承是单继承关系,继承关系构成一种树形结构。
RBAC2(Constraint RBAC)模型
RBAC2是基于RBAC0的模型,并增加了对角色的限制:角色互斥、基数约束、先决条件角色。RBAC2添加了责任分离关系,RBAC2的约束规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时应当遵循的强制性规则。责任分离包括静态责任分离和动态责任分离,约束与“用户-角色-权限”关系一起决定了RBAC2中用户的访问许可。
RBAC2的约束分为
角色互斥
同一用户只能分配到一组互斥角色集合中最多一个角色,支持责任分离原则。互斥角色是指各自权限相互制约的两个角色,对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。例如,在审计活动中一个角色不能同时被指派为会计角色和审计员角色。
基数约束
一个角色被分配的用户数量受限,一个用户可拥有的角色数目受限,同样一个角色对应的访问权限数量也应当受限,以控制高级权限在系统中的分配。
先决条件角色
可以分配角色给用户仅当该用户已经是另一个角色的成员,对应的可以分配访问权限给角色,仅当该角色已经拥有另一种访问权限。要想获得较高的权限,需要首先拥有第一级别的权限。
运行时互斥
运行中不能同时激活多个角色。
RBAC3(Combines RBAC)模型
RBAC3是最全面的权限管理,它是基于RBAC0基础上,将RBAC1和RBAC2整合后的统一模型。
RBAC3称为统一模型,包含了RBAC1和RBAC2,利用传递性也就将RBAC0包含在内。
用户组
当平台用户基数增大,角色类型增多时,如果直接给用户配角色,管理员的工作量就会很大。这时候我们可以引入一个概念“用户组”,就是将相同属性的用户归类到一起。
例如:加入用户组的概念后,可以将部门看做一个用户组,再给这个部门直接赋予角色(1万员工部门可能就几十个),使部门拥有部门权限,这样这个部门的所有用户都有了部门权限,而不需要为每一个用户再单独指定角色,极大的减少了分配权限的工作量。
同时,也可以为特定的用户指定角色,这样用户除了拥有所属用户组的所有权限外,还拥有自身特定的权限。
用户组的优点,除了减少工作量,还有更便于理解、增加多级管理关系等。如:我们在进行组织机构配置的时候,除了加入部门,还可以加入科室、岗位等层级,来为用户组内部成员的权限进行等级上的区分。