什么是权限RBAC权限模型?

RBAC就是一个权限控制模型,这个模型是经过时间沉淀以后,通用、成熟且被大众所接受认可得到一个模型。
RBAC(Role-Based-Access Control)权限模型的概念,即:基于角色的权限控制,通过角色关联用户,角色关联权限的方式间接赋予用户权限。
中间加一层角色提高了安全性和效率。
下图就是RABV权限模型:
image.png
此图中包含两种关系:
1):用户和角色是多对一的关系,即:一个用户只充当一种角色,一种角色可以有多个用户担当
2):用户和角色是多对多的关系,即:一个用户可以同时充当多种角色,一种角色可以有多个用户担当
如果系统功能比较单一,使用人员比较少,岗位权限清晰并且不会出现兼职岗位的情况,此情景下可以考虑使用多对一的权限体系。其余情况下尽量使用多对多的权限体系,保证系统的可扩展性。

RBAC权限模型的类型

上面的是RBAC0模型,也是基础,最简单的相当于底层逻辑,在这个基础上,又升级出RBAC1、RBAC2、RBAC3模型。

1.RBAC1模型

相对于RBAC0模型,C1增加了子角色,引入继承的概念,即子角色可以继承父角色的所有权限。
image.png

使用场景:如某个业务部门,有经理、主管、专员。主管的权限不能大于经理,专员的权限不能大于经理,如果采用C0模型做权限系统,极有可能出现权限分配失误,最终出现主管拥有经理都没有的权限的情况
而使用C1模型可以很好的解决类似的问题,创建完经理的角色并配置好权限,由主管角色的权限区继承经理角色的权限,并且支持在经理权限上删减主管的权限。

RBAC2模型

基于RBAC0模型,增加了对角色的一些限制:角色互斥、基数约束、先决条件角色等。

  • 角色互斥:同一个用户不能分配到一组互斥角色集合中的多个角色,互斥角色是指权限互相制约的两个角色。
  • 基数约束:一个角色被分配的用户数量受限,指的是能够有多少用户能拥有这个角色。
  • 先决条件角色:指想要获取较高的权限,要首先拥有低一级的权限。
  • 运行时互斥:允许一个用户具有两个角色的成员资格,但在运行时不可同时激活这两个角色。同一个用户拥有多个角色,角色的权限有重叠,以较大权限为准。

    RBAC3

    成为统一模型,它里面包含了RBAC1和RBAC2,利用传递性,也把RBAC0包含在内,综合了C0、C1、C2的所有特点,既有角色分层,又有约束的一种模型。
    image.png

    SpringSecurityOauth2