基于RBAC的权限管理
概念
RBAC即Role Based Access Control,意为基于角色的访问控制。用户与角色相关联,当用户在系统进行注册时可以选择成为某一角色从而拥有这个角色的权限,当然新注册的用户的权限也可以由上一级用户授予如管理员认定某个用户为某个角色就授予了该普通用户对应角色得权限。用户与权限的逻辑分离极大地简化了权限的管理。
关于权限资源
权限资源包括:
- 菜单:对应的是管理系统的菜单、页面、功能等。
- 目录:也是菜单的一种,只不过没有具体的功能页面,而是一个目录。
- 按钮:对应的是具体的功能页面上的按钮
- 接口:对应的是具体的功能页面上的接口
登录用户样例
简单权限时
用户ID | 用户名 | 用户类型 | 权限标识 |
---|---|---|---|
1 | admin | 1(超级管理员) | all |
2 | admin1 | 2(普通用户) | post:save post:update post:remove post:page |
3 | admin2 | 2(普通用户) | post:save post:update post:remove post:page |
RBAC时
角色ID | 角色名称 | 角色标识 | 权限标识 |
---|---|---|---|
1 | 超级管理员 | super_admin | all |
2 | 人事部 | hr | post:save post:update post:remove post:page |
3 | 研发部 | dev | config:save config:update config:remove config:page |
用户名 | 用户所属角色 | 权限标识 |
---|---|---|
admin | 超级管理员 | all |
admin1 | 人事部 | post:save post:update post:remove post:page |
admin2 | 研发部 | config:save config:update config:remove config:page |
admin3 | 人事部、研发部 | post:save post:update post:remove post:page,config:save config:update config:remove config:page |
数据库设计
概念模型设计
逻辑模型设计
物理模型设计
DDL
接口设计
ApiFox接口文件,导入即可
功能截图
权限资源
可通过【系统管理】->【菜单管理】进行管理
也可通过【系统管理】->【前端路由】进行同步
权限分配
主要管理角色和菜单的关系,即给角色分配菜单
通过【系统管理】->【角色管理】->【授权菜单】进行管理
成员管理
主要管理用户和角色的关系,即给角色分配用户
通过【系统管理】->【角色管理】->【成员管理】进行管理
授权角色
也可单独给用户授权某一个角色
通过【系统管理】->【用户管理】->【授权角色】进行管理
权限控制
后端接口权限控制
详见:权限拦截
关于登录用户权限码获取,可查看auth_service.py
下的login
方法,里面有权限码perms获取逻辑
前端页面权限控制
对于后端而已,只需要返回该用户的权限码即可,对应的接口为sys/user/permCode
,不过前端做了一些兼容处理,即如果/sys/user/info
接口中返回有perms权限码信息,就不会再调用sys/user/permCode
接口,而是直接使用返回的权限码信息。