混合了RBAC和ACL的权限系统(二) -- 基于RBAC的系统权限
http://fightplane.iteye.com/blog/1278464
1. 概念说明
A 系统级权限:从角色的角度出发,不特定于任何实际的资源的权限。比如“用户是否可以修改标题”这个权限,不针对于任何特定的标题。权限赋予给某个特定的角色。采用RBAC模型实现
B 对象级权限:从对象实例的角度出发。比如针对于某个特定的标题,编辑在这个标题上的权限。采用ACL模型实现。
那么判断用户是否可以修改某条的标题的判断顺序如下:
1) 用户所属的角色是否拥有“修改标题”的权限
2) 用户或者用户组是否在某条标题的的ACL列表当中
2. RBAC权限部分的表结构说明
1)系统权限(Permission)
系统权限列表
名称 |
定义 |
说明 |
id |
bigint |
主键,系统权限id |
name |
varchar |
名称 |
2) 角色(Role)
角色表
名称 |
定义 |
说明 |
id |
bigint |
主键,角色id |
name |
varchar |
名称 |
3) 授权(authorities)
给某个角色授予多项系统级权限
名称 |
定义 |
说明 |
id |
bigint |
主键,id |
roleid |
bigint |
角色id |
permissionid |
bigint |
权限id |
4) 用户组成员(memeberships)
用户组以及用户组成员
名称 |
定义 |
说明 |
id |
bigint |
主键,用户id |
groupid |
bigint |
用户组id |
userid |
bigint | 用户id |
roleid |
bigint |
角色id |
3. RBAC权限部分的关系说明
用户和角色:用户和角色是多对多的关系。但是在授予某个用户某个角色的时候,是以用户组为单位的。比如用户A在用户组1中可能是
“管理员”的角色,但是在用户组2中就可能是“普通用户”的角色。这种划分在业务系统中比较通用。当然,具体到一个用户,使用哪个用户组的角色来做判断,
是由业务来决定的。
角色和系统级权限:是一个一对多的关系。通过授权来完成。当然在授权之前,需要把需要使用的系统及权限注射到数据库的permission表。