以下为 mindmanager 的预览
RABC
概述
权限管理模型
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般都是多对多的关系。
RBAC是一套成熟的权限模型。在传统权限模型中,我们直接把权限赋予用户。
而在RBAC中,增加了“角色”的概念,我们首先把权限赋予角色,再把角色赋予用户。这样,由于增加了角色,授权会更加灵活方便。
在RBAC中,根据权限的复杂程度,又可分为RBAC0、RBAC1、RBAC2、RBAC3。
其中,RBAC0是基础,RBAC1、RBAC2、RBAC3都是以RBAC0为基础的升级。我们可以根据自家产品权限的复杂程度,选取适合的权限模型。
RBAC 认为授权实际上是Who 、What 、How 三元组之间的关系,也就是Who 对What 进行How 的操作,也就是“主体”对“客体”的操作。
Who:是权限的拥有者或主体(如:User,Role)。
What:是操作或对象(operation,object)。
How:具体的权限(Privilege,正向授权与负向授权)。
组成
User
用户
Role
角色
分类
admin
user
……
Resource(Permission)
权限/资源
分类
功能权限
- 模块
菜单权限
- 页内按钮操作
数据级
uri权限
页面,代表前端路由地址
按钮,代表后端接口地址
扩展
用户组
菜单
分类
基本模型RBAC0
介绍
RBAC0是基础,很多产品只需基于RBAC0就可以搭建权限模型了。
在这个模型中,我们把权限赋予角色,再把角色赋予用户。用户和角色,角色和权限都是多对多的关系。
用户拥有的权限等于他所有的角色持有权限之和。举例
- 譬如我们做一款企业管理产品,如果按传统权限模型,给每一个用户赋予权限则会非常麻烦,并且做不到批量修改用户权限。
这时候,可以抽象出几个角色,譬如销售经理、财务经理、市场经理等,然后把权限分配给这些角色,再把角色赋予用户。
这样无论是分配权限还是以后的修改权限,只需要修改用户和角色的关系,或角色和权限的关系即可,更加灵活方便。
此外,如果一个用户有多个角色,譬如王先生既负责销售部也负责市场部,那么可以给王先生赋予两个角色,即销售经理+市场经理,这样他就拥有这两个角色的所有权限。
- 譬如我们做一款企业管理产品,如果按传统权限模型,给每一个用户赋予权限则会非常麻烦,并且做不到批量修改用户权限。
RBAC0模型图
- ……
RBAC0适用场景
评价
角色分层模型RBAC1
RBAC1建立在RBAC0基础之上,在角色中引入了继承的概念。
简单理解就是,给角色可以分成几个等级,每个等级权限不同,从而实现更细粒度的权限管理。
举例
- 基于之前RBAC0的例子,我们又发现一个公司的销售经理可能是分几个等级的,譬如除了销售经理,还有销售副经理,而销售副经理只有销售经理的部分权限。
这时候,我们就可以采用RBAC1的分级模型,把销售经理这个角色分成多个等级,给销售副经理赋予较低的等级即可。
角色限制模型RBAC2
RBAC2同样建立在RBAC0基础之上,仅是对用户、角色和权限三者之间增加了一些限制。
这些限制可以分成两类,即静态职责分离SSD(Static Separation of Duty)和动态职责分离DSD(Dynamic Separation of Duty)。
静态职责分离SSD(Static Separation of Duty)
动态职责分离DSD(Dynamic Separation of Duty)。
举例
- 还是基于之前RBAC0的例子,我们又发现有些角色之间是需要互斥的,譬如给一个用户分配了销售经理的角色,就不能给他再赋予财务经理的角色了,否则他即可以录入合同又能自己审核合同;
再譬如,有些公司对角色的升级十分看重,一个销售员要想升级到销售经理,必须先升级到销售主管,这时候就要采用先决条件限制了。
统一模型RBAC3
RBAC3是RBAC1和RBAC2的合集,所以RBAC3既有角色分层,也包括可以增加各种限制。
RBAC3= RBAC1 + RBAC2
基于RBAC的延展——用户组
基于RBAC模型,还可以适当延展,使其更适合我们的产品。譬如增加用户组概念,直接给用户组分配角色,再把用户加入用户组。
这样用户除了拥有自身的权限外,还拥有了所属用户组的所有权限。
譬如,我们可以把一个部门看成一个用户组,如销售部,财务部,再给这个部门直接赋予角色,使部门拥有部门权限,这样这个部门的所有用户都有了部门权限。
用户组概念可以更方便的给群体用户授权,且不影响用户本来就拥有的角色权限。
实例
实体
用户表user
id
……
- 其他用户相关信息
角色表role
id
pid
name
- 角色名称
status
- 是否禁用
updated_time
created_time
权限表permission
id
name
url
status
关系
用户角色表 UA
id
uid
role_id
created_time
权限角色表 PA
id
role_id
per_id
created_time
其他
ABAC
基于属性的权限验证(ABAC: Attribute-Based Access Control)
DAC
案例
文件系统
自主访问控制(DAC: Discretionary Access Control)
MAC
强制访问控制(MAC: Mandatory Access Control)
案例
政府机密文件
要素
控制体
权限标识
用户
- 权限标识
SAM
SAM(Security Access Manager)
有赞