序言
本文介绍 RBAC2 模型以及具体的实现方案。本文仅提供实现思路供大家参考,在生产实践中请根据业务场景进行具体设计。
一、RBAC2 模型
RBAC2 是 RBAC(基于角色的访问控制)模型中的一种,它在 RBAC0 的基础上,对用户、角色和权限三者之间增加了一些限制。这些限制可以分成两类,即静态职责分离 SSD (Static Separation of Duty) 和动态职责分离 DSD (Dynamic Separation of Duty)。
例如,有些角色之间是需要互斥的,譬如给一个用户分配了销售经理的角色,就不能给他再赋予财务经理的角色了,否则他即可以录入合同又能自己审核合同。
二、RBAC2 库表设计方案
RBAC2 是在 RBAC0 模型的基础上增加了约束。我们可以按如下方式设计库表。
- 用户表:用户表存储了系统中所有用户的基本信息,例如用户名、密码、电子邮件地址、用户类型等。
- 角色表:角色表存储了系统中所有角色的基本信息,例如角色名称、描述、创建时间等。角色是一组权限的集合,它们代表了系统中不同用户所扮演的不同角色,例如管理员、经理、普通用户等。
- 用户角色关系表:用户角色关系表用于建立用户与角色之间的关系,这是一个多对多关系。每一行记录表示一个用户被赋予了一个角色,即一个用户可以拥有多个角色,而一个角色也可以被多个用户所拥有。
- 权限表:权限表存储了系统中所有权限的基本信息,例如权限名称、描述、权限类型等。
- 角色权限关系表:角色权限关系表用于建立角色与权限之间的关系,是一个多对多关系。每一行记录表示一个角色被赋予了一个权限,即一个角色可以拥有多个权限,而一个权限也可以被多个角色所拥有。
- 角色互斥表:角色互斥表存储了角色之间的互斥关系,用于表示某些角色之间是互斥的,不能同时被赋予给同一个用户或用户组。
三、RBAC2 模型业务处理流程
我们以新增角色业务为例,看一下 RBAC2 模型业务的处理流程:
- 当接收到新增角色请求之后,首先查询当前用户拥有的角色
- 根据拥有的角色查询角色对应的权限列表
- 判断当前用户是否拥有新增角色的权限
- 若没有新增角色的权限,则直接返回权限不足
- 若权限校验通过,则进行角色互斥检查
- 若新增角色与已有角色互斥,则直接返回违反约束
- 角色互斥检查通过,则新增角色,并正常返回