🗒️权限模型-RBAC模型
type
status
date
slug
summary
tags
category
icon
password
原文
RBAC 是一种
基于角色的权限访问控制
(Role-Based Access Control),这是一种通过角色关联权限,角色同时又关联用户的授权的方式。将用户分配给角色,角色又与权限关联起来 ,间接的实现对用户的权限管理。
主要流程为:
- 定义角色:根据系统需求,定义不同的角色,并为每个角色指定权限集合。
- 分配角色:将用户分配到特定的角色上。
- 访问控制:用户
以角色身份
访问系统资源时,根据角色拥有的权限决定是否允许访问。
在一些WEB 应用中,尤其是B端管理应用中的菜单、按钮权限基本都是使用该权限方案。
1.核心概念
- 用户:指需要访问系统资源的个体,通常是系统的用户。
每个用户可以被分配一个或多个角色
。
- 角色(Role):角色是权限的集合,代表一种身份(如管理员)。角色赋予了用户的特定的权限,不同的角色拥有不同的权限组合。
RBAC 中的角色是一组具有某些行为特征的人,例如部门、地点、级别。
- 权限(Permission): 权限是操作资源的具体权利。比如读取文件、编辑数据、API等。
- 资源(Resource): 资源是用户可以访问或操作的系统对象,比如文件、数据库表、API 接口。
2.表设计
对于RBAC模型通常来说包含了 5 个核心表,分别为用户表、权限表、角色表、用户角色关联表、角色权限关联表。
- 用户表:存储系统用户的基本信息。
- 角色表:用于存储系统中的不同的角色信息。
- 权限表:用于存储系统的具体权限信息。
- 用户角色关联表:用于存储用户和角色之间的多对多关系,一个角色也可以被多个用户拥有。
站在用户的视角,单个用户可以拥有多个角色,是一对多的关系,所以图中描述的是 1对 N
- 角色权限关联表:用于存储权限和角色之间的多对多关系,一个权限也可以被多个 角色拥有。
站在角色的视角,单个角色可以拥有 多个权限,所以图中描述的是 1对 N。

在这个模型之下通过 5 张表的关联查询就可以查询到当前用户拥有哪些权限。
3.模型设计示例

该模型设计了一个简单的菜单权限的示例。
4.模型的变体
根据业务的复杂度和控制需求有 4 种不同的模型。
RBAC 0 (基础)
如上面描述的,最基础的 RBAC 模型。用户、角色、权限之间的基本关联。
RBAC 1 (层次化的 RBAC)
在基础模型之上增加了角色之间的继承关系,允许定义角色的上下级关系,上级的角色自动继承下层角色的权限。细化了角色层级和权限的关联关系
举个例子:系统有个销售的角色,销售也分销售经理、销售员、销售主管,每个角色的权限不一样。
如果是基础模型,需要定义N 个角色来完成这个需求,在该模型下只需要将角色分层即可。
RBAC 2(约束性 RBAC)
在 RABC 1的模型上添加了约束条件,如
分离职责
和互斥角色
以满足更复杂的业务需求。什么是互斥角色?
互斥角色是一种约束
,用于避免在同一用户上配置相互冲突的角色。互斥角色限制了特定角色的组合,确保同一用户在执行某一任务时,不会拥有可能导致冲突的权限。假设有一个银行系统,包含两个角色:
• 贷款审批人(Loan Approver):可以审批贷款申请。
• 贷款审计员(Loan Auditor):可以审查贷款记录,确保符合合规性。
为了防止同一用户既可以审批贷款又可以审查记录,从而可能隐藏违规操作,可以设置“贷款审批人”和“贷款审计员”为互斥角色,即:
如果某个用户被授予“贷款审批人”角色,该用户将不能被授予“贷款审计员”角色。
这样,如果用户 C 是“贷款审批人”,他就无法拥有“贷款审计员”角色,而其他用户可以担任“贷款审计员”角色,从而起到互相监督的作用。
什么是分离职责?
分离职责是一种安全策略
,确保关键任务由不同的角色或用户来执行。假设有个公司里面的财务系统,其中包含了 两个角色:
- 订单的审批人 : 负责审核并批准订单
- 付款执行人:负责支付已批准的订单
为了避免同一个人拥有订单的审批和执行付款的权限,在该模型中引入了分离职责的约束条件以减少业务风险。
分离职责在具体的业务需求表现是增加了若干的约束。
- 互斥的角色同一个用户在互斥角色中只能选择一个。如果一个用户可以拥有两个角色,但是运行时只能激活一个角色。
- 一个用户拥有的角色是有限的,一个角色拥有的权限也是有限的(admin 除外)。
- 用户想要获得更高级的角色,首先必须拥有低级的角色。
上述的描述中在很多的应用者都有体现,如你在招聘软件中可以拥有两个角色,应聘者和招聘者,但是在登录 APP 时会让你选择一个身份进入系统。
如何做到互斥角色和分离职责?
在 RBAC 结构表中增加一张“约束表”来保存角色间的约束信息。
RBAC 3(综合 RBAC)
在 RBAC 2 的基础上进一步的扩展,既包含了基于层级的角色管理,又增加了角色的约束(分离职责和互斥角色),从而适应大型的组织结构复杂的权限分配需求。
总结:RABC 3 = RBAC 1 + RBAC 2

role_constraints 角色互斥约束表
role_hierarchy 较色层级结构表
Prev
权限模型-ABAC模型
Next
Raft算法
Loading...