权限设计方案-技术实现说明文档
1. 新老系统权限区别
- 权限实现方式老系统使用shiro拦截器实现,新系统改变spring Interceptor,系统更为轻量,更为灵活。
- 菜单配置,老系统使用数据库存储的方式,新系统改变xml配置在项目充,不需要跟随系统发布配置。
- 权限关系缓存,老系统对每个用户的所以菜单角色缓存,新系统在这方面做了调整精简精简集中配置。
2. xml中菜单和接口信息配置规则
- 配置文件内menu标签为一个实体菜单项,menu 之间的层级关系,先后顺序,直接体现在实体菜单内。
- menu 标签下的api 表示,拥有这个menu的用户,便有权限调用对应的api接口。
- 例子:菜单1 下面标注了接口 a,b,c,菜单二下面标注了接口,c,e,f。有菜单1的用户就有权限调用,a,b,c 接口,
有菜单2的用户就有权限调用 c,e,f 接口。两个菜单都有的用户,就有权限调用,a,b,c,e,f接口。这5接口,没有在别的菜单下标注的话,那么用户如果没有这两菜单的权限,就无法调用这几个接口。
3.权限实现机制
- 系统启动后,将xml的配置信息导入到系统内。然后读取数据库中角色和菜单关系信息
- 创建【角色-菜单】映射,【接口-角色】映射,信息存入系统高速缓存中。
- 用户登录后,读取用户所以角色信息,存入系统高速缓存中。
- 获取用户菜单列表,根据用户角色信息,读取缓存中【角色-菜单】信息,去重,排序等操作之后,展示给用户。
- 用户请求api接口,读取【接口-角色】,和用户角色做匹配判断用户是否有对应权限。
- 角色菜单关系发生变化,刷新对应【角色-菜单】映射,【接口-角色】映射,保证系统权限实时更新。
- 用户角色发生变化,刷新用户角色缓存 保证用户权限实时更新。
3.菜单角色关系,用户角色关系管理,用户第系统权限管理操作。
- 参考 https://192.168.32.7:9090/svn/zjzc-web/trunk/doc/Requirement/业务需求/后端产品化/系统管理/demo/index.html 产品设计文档。