RBAC权限模型概述

  • 权限对web应用来讲就是对url的控制,还有页面的展现,还有。。。
1.传统权限模型

简单的权限控制模型,如用户集合和权限集合中的元素多对多对应。web

2. 引入==角色==概念:RBAC0

但如上模型的缺点是,若是拥有相同权限某类人——好比同一个部门的人,须要增长权限时,每一个人都须要在本身对应的权限集合中添加一个元素,这样操做繁琐而且容易出错,可行的作法是从权限集合中抽象抽一个子集做为角色,好比x部门成员,将x部门成员与角色对应便可,这样x部门所有成员的权限便可经过角色来控制。图示以下:框架

3. 引入用户组

同理,除了引入角色的概念来简化赋权外,用户集合也能够抽象出相似于 权限集合/角色 的用户组,将角色与用户组关联来进行赋权,用户拥有权限的集合是用户关联的角色和用户所在用户组关联的角色的并集。图示以下(**注意括号中角色与权限是关联的):
url

4. 权限设计:将权限与资源关联

资源只有一种,即数据,可是具体的应用系统中须要更细致的分类来方便权限与资源的关联。设计

咱们对数据的操做有增删改查四种。权限类型也能够按照这四种操做作几个基本的划分。好比:3d

  1. 增删改——只有管理员——拥有此三种权限的人,对应的页面才可以渲染出相应的建立和编辑的按钮;
  2. 查——不一样权限的人渲染页面数据不一样,好比管理员能够渲染记录的更多列来查看更详细的数据。

以上都是基于页面渲染来讲的。如今公司将权限基本分为三类:页面模板、接口和数据模板。个人理解是这种方法和增删改查的分别是横切和纵切,相交又包含。一种权限分类图示以下:blog

  • 能够根据“权限类型”的取值来区分是哪一类权限,如“MENU”表示菜单的访问权限、“OPERATION”表示功能模块的操做权限、“FILE”表示文件的修改权限、“ELEMENT”表示页面元素的可见性控制等。继承

  • 注意没添加一个页面元素或者文件表,在“文件表”、“权限文件关联表”和“权限表”中会相应的添加一条记录。接口

综上,成型的RBAC模型以下:
资源

5.角色分层模型RBAC1(Hierarchal RBAC)

以上,三、4小节能够看做是实践拓展,RBAC模型分为RBAC0/1/2/3三种,RBAC0是RBAC1和RBAC2的基础,RBAC3是RBAC1和RBAC2的合并。权限控制

RBAC1将角色作了分层,引入了等级的概念,相同角色的低等级能够继承高等级的权限。图示以下:

6.角色限制模型RBAC2(Constraint RBAC)

RBAC2是在RBAC0的基础上加上了约束用户可以拥有的角色的思想,主要引入了

  • 静态职责分离SSD(Static Separation of Duty):在用户和角色的指派阶段加入的,主要约束有互斥角色、基数约束和先决条件约束等;
  • 动态职责分离DSD(Dynamic Separation of Duty):是会话和角色之间的约束,能够动态的约束用户拥有的角色。会话是动态的概念,用户必须经过会话才能够设置角色,是用户与激活的角色之间的映射关系

二者对比图示以下:

7.RBAC3是RBAC1与RBAC2的合并,既有角色分级,又有用户赋予角色是的约束。

综上,一个完善的权限框架有:

  1. 用户-角色-权限(RBAC0);
  2. 用户分组;
  3. 角色分级且可继承(RBAC1);
  4. 用户赋予角色时的限制(RBAC2)
  5. 完善的权限设计;

上述将角色赋予用户时,要灵活的使用用户的信息,使用表达式来进行灵活的绑定,好比性别为男的用户自动赋权能够上男厕所。