模型|B端后台“权限设计”的99种解法与反思( 三 )


从这个角度来讲,在使用场景和需求相对一致的情况下,可以将这部分用户看作一个需求集合体一致的群组,进而形成一个用户组(即为用户的集合体)。
拿之前的例子来说,若A部门为产品运营部,那么我们无需对A部门内部的人去分配角色。而是以A部门为对象去分配角色。

模型|B端后台“权限设计”的99种解法与反思
文章插图
同时,现实中同样也存在以下使用场景,需要对用户分配居多的权限,若一个个分配将特别繁琐,因而可以选择将相对固定的权限打包成组来赋予给用户。

模型|B端后台“权限设计”的99种解法与反思
文章插图
2)角色分层模型:RBAC1
RBAC1在RBAC0的基础上,引入角色间的继承关系,即角色上有了上下级的区别。角色间的继承关系可分为一般继承关系和受限继承关系。

模型|B端后台“权限设计”的99种解法与反思
文章插图
一般继承关系仅要求角色继承关系是一个绝对偏序关系(有向无环图),可进行多继承。而受限继承关系则进一步要求角色继承关系是一个树结构(二叉树)间的单继承。
一般继承的RBAC和受限继承的RBAC两者的区别在于:前者是图,可多继承;而后者可以有多个父节点但只能有一个子节点,是一个反向树结构,只能单继承。

模型|B端后台“权限设计”的99种解法与反思
文章插图
RBAC1模型往往使用于角色之间层级明晰的产品中,一般会和组织架构关联起来。例如,李三为产品运营,其上级李四为产品经理。则李四会将其部分权限授权给李三,也可认定为李三继承了李四的部分权限,即子集继承了父级部分权限。
3)角色限制模型:RBAC2
RBAC2模型中添加了责任分离关系。RBAC2的约束规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。
责任分离包括静态责任分离和动态责任分离。约束与用户——角色——权限关系一起决定了RBAC2模型中用户的访问许可,此约束有多种,主要包括:
静态限制(静态责任分离)同一用户只能分配到一组互斥角色集合中至多一个角色,支持责任分离的原则。例如:同一个人不能既是“运动员”又是“裁判员”,即当用户分配给受众运动员的角色后,权限页面无法给于其分配裁判员的权限。

模型|B端后台“权限设计”的99种解法与反思
文章插图
动态限制:运行时互斥:例如,允许一个用户具有两个角色的成员资格,但在运行中不可同时激活这两个角色。当一个人被授予了运动员和裁判员角色,在一次比赛中,他只能选择以一个身份进行,不能以两种身份同时进行。
基数约束:一个角色被分配的用户数量受限;一个用户可拥有的角色数目受限;同样一个角色对应的访问权限数目也应受限,以控制高级权限。
先决条件角色:可以分配角色给用户仅当该用户已经是另一角色的成员;对应的可以分配访问权限给角色,仅当该角色已经拥有另一种访问权限。要想获得较高的权限,要首先拥有低一级的权限。就像我们生活中,国家主席是从副主席中选举的一样。
4)整合统一模型:RBAC3
RBAC3包含了RBAC1和RBAC2,既提供了角色间的继承关系,又提供了责任分离关系。

模型|B端后台“权限设计”的99种解法与反思
文章插图
5. 基于属性的权限验证(ABAC:Attribute-Based Access Control)
ABAC被认为是权限控制的未来,由于其逻辑比较复杂,笔者并未吃透,所以只简单地介绍一下。

推荐阅读