完整的 sso + RBAC 用户权限控制系统设计和实现

一,概念

 

1.1 sso

 

1.2 restful auth

 

1.3 RBAC

 

RBAC:
基于角色的权限访问控制(Role-Base-Access Control)


从RBAC0到RBAC3分别需要5到12张表
1. RBAC0
RBAC0是RBAC中的基础模型,后续的模型都是RBAC0的改进
RBAC0引入了角色概念来解决用户与权限之间的分离问题,用户实际上没有权限,而只有给用户赋予某种角色之后,才拥有相应的权限.
RBAC0主要解决了权限的分离问题


数据表模型:
我们需要5张表来完成RBAC0
分别是:
1.用户表(User)
字段:用户名,密码
2.角色表(Role)
字段:角色名,角色父ID
3.权限表(Permission)
字段:权限名,类方法名,权限父ID
4.权限角色关联表(PA) ->多对多
字段:角色ID,权限ID
5.用户角色关联表(UA) ->多对多
字段:用户ID,角色ID


现在我们实现了一个基本的RBAC0的基础模型
我们来对这个模型加以改进:
当用户数量过多的时候,我们需要引入用户组的概念.角色不仅可以对用户进行关联,也可以对用户组进行关联,所现在我们需要添加三张表
添加以下三张表
6. 用户组表(UserGroup)
7. 用户组角色关联表(UGA)
8. 用户组与用户关联表(UUG)
在公司中,我们还有所谓的上下级关系,一个部门部长下面要管理副部长,经理等等.这时我们就要引入角色的继承关系来表示上下级关系,体现在数据表上,就要添加一张角色继承表
9.角色继承关系表
到了这一步我们基本上实现了RBAC1的标准规范
而在角色的继承中,我们其实对继承的角色权限也要加以控制,毕竟不可能让继承过来的角色拥有父角色的所有权限,所以就需要多加一张对来对继承的角色进行权限约束
10.角色权限约束
我们除了对角色进行约束,其实还可以对用户来进行一些相关的约束来更好的保证整个系统的责任链分离,如果你也添加了用户的约束规则,那么我们就基本上达到了RBAC2的规范了
11.用户激活约束
在这个基础上,我们再来看看权限授权这一部分
这时候,如果我们需要判定的功能权限太多,那么就可以将权限划分模块,然后统一将角色授权给某个模块.
12.权限模块表
13.权限模块与权限关联表
14.角色与模块的关系表

15.操作表

16.资源表
到此个人认为已经达到了比较完善的RBAC权限控制

 

二,

posted @ 2019-08-08 09:39  MoreJewels  阅读(2334)  评论(0编辑  收藏  举报