权限系统的构想(少用户多权限)

最近团队由于项目需求的增多,需要单独设计一个权限系统出来,参考了网上很多的权限/访问控制系统以及一些设计原则比如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 []

haofly wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!