本篇简单记录框架搭建中关于角色权限设计的思路。权限系统基于RBAC的模式,通过在Ocelot网关中校验JWT的Token有效性,获取到角色Id,通过Casbin引擎验证用户是否有访问接口的权限。
设计思路如下图所示:
具体实现如下图所示:
技术选型:
1.为什么基于RBAC模式?
通过对比ACL和ABAC以及RBAC这三种模式,最终选择了RBAC,ACL不利于角色权限管理,ABAC的权限管理的颗粒度比较细,目前业务暂时不需要,基于RBAC的数据库设计图大致如下:
实际表设计可以大致参考,关联表的细分对于业务的解耦有很大帮助
2.为什么采用Casbin,而不是微软基于Claim的权限声明
基于Claim的授权策略不够灵活,需要指定策略名,且无法实现RBAC1,RBAC2模型的实现,即对于角色继承和角色间的约束无法实现,Casbin作为一个开源的访问控制框架,对此有很好的支持
3.为什么在Ocelot中配置权限校验
基于微服务设计的思想,在所有请求中都会通过网关来分发,为了方便统一管理,在Ocelot中配置其中间件,拦截所有请求,通过Token获取角色Id,判断当前角色是否有权限访问。
以上仅用于学习和总结!
附: