RBAC模型

RBAC介绍

RBAC(Role-Based Access Control)权限模型即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。

在我们的生活中,不同的用户肯定会赋予不同的权限,而这个RBAC模型就是基于角色的访问控制的一种权限模型。

1

而权限一般的想法是只要给用户分配权限就行了,何必多此一举,中间加一个角色给权限找个中间商?——其实之所以在中间加一层角色,是为了增加安全性和效率,而且后续扩展上也会提升不少。

比方:多个用户拥有相同的权限,在分配的时候就要分别为这几个用户指定相同的权限,修改时也要为这几个用户的权限进行一一修改。有了角色后,只需要为该角色制定好权限后,将相同权限的用户都指定为同一个角色即可,便于权限管理。对于批量的用户权限调整,只需调整用户关联的角色权限,无需对每一个用户都进行权限调整,既大幅提升权限调整的效率,又降低了漏调权限的概率。就是通过控制角色的权限从而实现对用户的权限控制,在一定程度上能降低成本和消耗。

最基本模型——RBAC0

RBAC0模型,也是基础、最简单的,相当于底层逻辑。在这个模型中,我们把权限赋予角色,再把角色赋予用户。

这个模型中又包含了2种:

1.用户和角色是多对一关系,即:一个用户只充当一种角色,一种角色可以有多个用户担当。

2.用户和角色是多对多关系,即:一个用户可同时充当多种角色(用户拥有的权限等于他所有的角色持有权限之和),一种角色可以有多个用户担当。(我们的系统就是使用的多对多)

2

RBAC权限模型的类型

角色分层模型RBAC1

相对于RBAC0模型,对角色这层元素上进行了细分引入了继承概念——可以继承某个基础角色生成子角色。简单理解就是,给角色可以分成几个等级,每个等级权限不同,从而实现更细粒度的权限管理。

image-20220716225642091

角色限制模型RBAC2

RBAC2同样建立在RBAC0基础之上,仅是对用户、角色和权限三者之间增加了一些限制。这些限制可以分成两类,即静态职责分离SSD(Static Separation of Duty)和动态职责分离DSD(Dynamic Separation of Duty)

  • 静态职责分离 SSD
    • 角色互斥:相同用户不能同时拥有互斥关系的角色,例如会计和出纳两个角色就是互斥的
    • 基数约束:角色被分配到的用户有数量上限,例如公司中只有一个 CEO 职位,那么这个角色的数量就是有限的
    • 先决条件角色:要拥有更高级别的角色权限,需要先获取到相对来说低级别的一些权限,例如副经理要想获取到总监级别权限,那么他需要先获取到经理级别的权限
  • 动态职责分离 DSD
    • 动态的限制用户及其拥有的角色,例如一个用户可以同时拥有两个角色,但是运行时只能激活一个角色

统一模型RBAC3

RBAC3就是RBAC1和RBAC2的合集,所以RBAC3既有角色分层,也包括可以增加各种限制。——RBAC3=RBAC1+RBAC2

但是此模型只有在系统对权限要求非常复杂时,才考虑使用。因为其的复杂对开发和后期维护并不友好。

数据库和RBAC模块功能设计

数据库我们就可以根据用户,角色,权限三个分别建表,然后搭建用户和角色角色和权限的映射关系。

image-20220716231411782

Golong访问控制框架——Casbin