RBAC权限管理

发布时间 2023-12-09 16:33:23作者: 泠风lj

RBAC应用最为广泛的权限管理模型,核心的三要素是:用户、角色、权限,但并不仅仅局限于这三个核心要素,基于企业规模、用户规模、运维复杂度,RBCA其实是有很多的变种。从理论角度,有所谓的RBAC0、RBAC1、RBAC2、RBAC3等变种。

1、RBAC模型

1.1、传统权限模型

用户直接分配权限,每一个用户都需要勾选账号对应的每一个权限,当用户的权限都相同时都需要做重复的工作,也做不到批量修改用户权限,可见非常繁琐,维护起来非常麻烦。

 

1.2、什么是RBAC模型

RBAC增加了“角色”的概念,我们首先把权限赋予角色,再把角色赋予用户。这样,由于增加了角色,授权会更加灵活方便。RBAC把权限体系抽象成三个实体:用户、角色、资源(权限的抽象)。三个实体之间的关系如下:

也就是说,角色实际上是人与资源之间的中间桥梁,人可以通过拥有某个角色来获得该角色下的所有权限。如下所示:

举例:

         如上图,如果按传统权限模型,给每一个用户赋予权限则会非常麻烦,并且做不到批量修改用户权限。这时候,可以抽象出几个角色,譬如普通员工、财务、采购等,然后把权限分配给这些角色,再把角色赋予用户。这样无论是分配权限还是以后的修改权限,只需要修改用户和角色的关系,或角色和权限的关系即可,更加灵活方便。此外,如果一个用户有多个角色,譬如王先生既负责财务和采购,那么可以给王先生赋予两个角色,即财务角色+采购角色,这样他就拥有这两个角色的所有权限。

当用户的工作内容发生变化时,如上图林总职务变更(从采购总监变更为财务总监),只需要重新绑定用户关联的角色,而不用一一删除该用户的权限再添加权限。

 

2、RBAC0 模型

RBAC0是RBAC系列模型中的基础模型,随后的RBAC系列模型都将按照RBAC0基础模型进行改进。用户与角色的关系有两种设计,如下:

2.1 用户与角色多对一(一个用户只对应一个角色)

1、创建用户的时候选择角色,如下图:

2、表设计图:

优点:设计简单

缺点:

  1. 用户的创建依赖角色,即要先创建好角色后再创建用户
  2. 当一个用户同时拥有两个角色时,会使角色膨胀,如:

系统中有“人事”、“财务”、“经理”等角色,如张三同时兼职人事经理和财务经理,此时只能创建个新角色“人事&财务”来包含对应的操作权限。

 

2.2 用户与角色多对多(推荐设计)

1、创建用户:

2、创建角色:

3、建立用户与角色的关联关系:

表设计图:

优点:

1、用户创建不依赖于角色,用户与角色之间的关系单独维护。

         2、当一个用户同时拥有多个角色对应的权限时,只需要把用户绑定到对应的多个角色,

不需要重新定义新角色来绑定。

缺点:

用户膨胀:当用户量大时,为每个用户进行角色绑定维护起来麻烦。(引入用户组)
权限膨胀:当权限膨胀时,为每个角色绑定权限维护起来麻烦。(引入权限组)

3、RBAC1模型(角色继承)

RBAC1,基于RBAC0的优化,增加了角色的分层(即:子角色),子角色可以继承父角色的所有权限;角色继承的RBAC模型的思路是上层角色继承下层角色的所有权限,并且可以额外拥有其他权限。

举例:

视频网站,付费会员角色继承普通会员角色,那么付费会员除了普通会员的权限外还具备浏览付费内容的权限。

 

4、RBAC2模型(角色约束)


RBAC2引入了角色互斥、基数约束、先决条件约束。角色互斥,一个用户能拥有角色A,就不能拥有角色B,角色A和角色B是互斥的。也可以是权限互斥,权限A和权限B不能在一个角色里。

基数约束,一个角色被分配的用户数量有限;一个用户拥有的角色数量有限;一个角色被分配的权限数量有限;以便控制高级权限在系统中的分配;

先决条件约束,想获得某个上级角色,必须先拥有下级角色。

举例:

1、一个人不能既是裁判,又是运动员;

2、譬如给一个用户分配了财务经理的角色,就不能给他再赋予审计经理的角色了,否则他即可以录入账单又能自己审核账单;

3、有些公司对角色的升级十分看重,一个财务员工要想升级到财务经理,必须先升级到财务主管,这时候就要采用先决条件限制了。

 

5、RBAC3模型


RBAC3基于RBAC0,将RBAC1、RABC2进行了整合,是最全面的权限设计模型。其中涉及到的概念有用户组、组织、职位。
 

1、用户组平台用户多,角色类型增多,有一部分人具有相同的属性。比如生产部的所有员工等,如果直接给这些用户分配角色,就会增加管理员的工作量。如果给这些用户分组,并给用户组分配角色,用户组里的每个用户都具有用户组下的角色。如果用户退出用户组,就撤销用户组下的角色,这样就大大减少了管理员的工作量,无需管理员手动管理角色。用户组又分为具有上下级关系的用户组、普通用户组。具有上下级关系的用户组,和部门、职位关联起来。按照部门和职位对用户进行分组。普通用户组,没有上下级没关系,和部门职位也没有关系。纯粹地对用户进行分组。

2. 组织对于组织结构复杂的公司,可以把组织架构和角色关联起来。一旦把某个人加入某个组织,该用户就会拥有该组织下的所有角色。

3、职位每个部门下有很多职位,职位不同,职位的权限也不同。把职位和角色关联起来,一旦赋予某人某个职位,该用户就会拥有该职位下的所有角色。特殊情况下,一个人可以拥有多个职位。

在实际开发中,根据不同的业务需求,会有各种各样的演变,业务逻辑复杂的,权限系统也复杂,想要做出通用全面且高效的权限模型,还是非常不容易的。现在就把用户组、组织、职位、角色互斥、基数约束汇总起来画个草图。

 

6、总结

权限模块是一个系统中最基础也是非常重要的一个模块。要考虑角色继承就使用RBAC1模型,要考虑角色互斥、基数约束、先决条件约束就使用RBAC2模型。中小型公司使用RBAC0模型就足以使用,超大型的公司再考虑RBAC3设计模型,也可以根据实际的业务需要进行适当的裁剪。

 

 

转载自

https://blog.csdn.net/haoa0320/article/details/129194317