关于微服务分布式架构的权限资源设计初步设想
最近开发的系统是前后端分离+微服务分布式架构,不同于单体应用的权限身份校验机制,前后端分离的情况下,无法直接确认前端请求者的身份权限,需要通过第三方鉴权中心来操作,身份校验较为简单,直接过滤网关级别的请求即可,但是权限校验就比较复杂了。
初步设想
资源:
- 系统
- 菜单
- 按钮
- 服务
- api
对象:
- 部门
- 人员
- 账号
枢纽:
- 角色
整体关系如下:对象通过枢纽进行资源的权限分配
数据库设计:
通过对中间表的维护,来收集用户的权限信息,其中部门角色具有继承的特性
使用结果
菜单权限
菜单权限通过前端配合实现动态路由,可以实现完全的权限控制,其中按钮的权限主要还是在前端进行逻辑处理,服务端完全无法控制,只能作为数据提供者
API权限
API权限,通过上面的权限体系可以做到颗粒度为API级别的控制,功能可以实现
不足之处:问题在于,这个关系表人工维护的话,成本较大,因为需要明确规定好该页面调用了哪些接口,前端有变更则需要及时录入数据,否则会响应无操作权限,这里的想法是分三步走,
第一步:首先开发前后端同步开发,前端只维护系统菜单数据,后端维护服务接口数据,菜单接口关系表暂时不进行维护
第二步:前后端初步开发完毕之后,通过小工具扫描前端代码, 进行菜单接口关系的自动录入
第三步:通过搭建一个API接入申请系统,有需求变更的时候,前端申请某个页面的需求变更,并对新增的和删除的API进行申报,数据校验完毕之后,申请系统自动异步更新菜单接口关系表,完成两者的动态维护