最近团队由于项目需求的增多,需要单独设计一个权限系统出来,参考了网上很多的权限/访问控制系统以及一些设计原则比如RBAC(Role-Based Access Control),这里,记录一下自己对权限系统的一种构想。需要注意的是,RBAC中也有分组的概念,但是它的分组仅仅是为了将相同权限的人集中在一起。我的构想虽然没有分组的概念,但是也符合RBAC原则的,只是因为我做的更彻底,不仅将角色与权限直接关联,更是将用户与权限直接关联,产生了一定的冗余,更适用于人数少但是权限多的情况。
实体表
应用表
字段名 | 字段注释 |
---|---|
id | app_id |
角色表
字段名 | 字段注释 |
---|---|
id | role_id |
app_id | 应用ID |
name | 名称(英文) |
beta | 备注 |
权限表
字段名 | 字段注释 |
---|---|
id | privilege_id |
app_id | 应用ID,不提供表示通用的权限 |
name | 名称(英文) |
beta | 备注 |
操作表
字段名 | 字段注释 |
---|---|
id | operator_id |
app_id | 不提供表示通用的操作 |
name | 名称(英文),例如: add, delete, edit, query |
beta | 备注 |
关联表
用户与权限关联表:此表与角色权限对应表之间是有一定冗余的,但是考虑到个性化需求以及第三方APP的需要,所以在可以忍受的范围内
字段名 | 字段注释 |
---|---|
id | |
user_id | 用户ID |
role_id | 角色ID: 为0表示该权限是独立分配的,独立分配的优先 |
privilege_id | 权限ID |
operator_id | 操作ID |
disabled | boolean |
角色与权限对应表
字段名 | 字段注释 |
---|---|
id | |
role_id | 角色ID |
privilege_id | 权限ID |
operator_id | 操作ID |
用户与角色对应表
字段名 | 字段注释 |
---|---|
id | |
role_id | 角色ID |
user_id | 用户ID |
常用操作
添加权限: 直接添加
给单独用户添加权限: 保存在角色与权限表中,并将role_id标志为单独的那一个id
删除用户角色: 直接根据role_id进行disabled,添加了就不直接删除
删除用户权限:直接根据role_id进行disabled,也不直接删除
其他平台登录:只需要在登录的时候获取该用户在该平台的所有的额权限即可,连分组都不需要,因为权限都是在权限系统中进行统一登记注册的,所以其他平台不用单独存储权限列表,而只需要获取获取当前用户的权限,放到缓存里面即可,例如redis,可以直接存储为一个列表user:privileges []