RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。
这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。
1、权限核心-用户角色资源
权限核心.png菜单采用树形结构展示给前端
角色与用户多对多
角色与菜单(资源)多对多
菜单、接口、页面等资源进行平台的划分,角色进行系统的划分
2、获取资源流程
2.1从数据库中获取菜单
以往都是用户登录完成后,通过权限中心提供一个获取菜单树的接口,直接从数据库中获取。
数据库中获取数据.png2.2从缓存中获取资源
权限不足403, 具体的返回码需要与前端约定
缓存中获取数据.png3、缓存
角色对应的资源缓存
类型 | redis数据结构 | key | value |
---|---|---|---|
菜单 | string | systemId:roleId:menu:platformId | 菜单列表 |
接口 | set | systemId:roleId:api:platformId | 路径 /api/user/info |
页面 | set | systemId:roleId:page:platformId | 页面 |
用户对应的资源缓存
类型 | redis数据结构 | key | value |
---|---|---|---|
菜单 | string | menu:token | 菜单树 |
接口 | set | api:token | 路径 /api/user/info |
页面 | set | page:token | 页面 |
4、添加资源
增加资源后,为角色分配资源时,保存数据库后,需要更新角色在redis中对应的缓存
添加资源.png
5、切换商户
切换商户,更新对应token的资源缓存,token的资源缓存,根据role的资源缓存生成。
切换商户.png6、接口获取
根据swagger,获取所有的接口,进行进口权限的分配
分配接口权限.png
网友评论