简单权限管理模型介绍
前言
风、宇个人博客的权限管理也是一个亮点,实现了接口管理与菜单管理,将前后端的权限都封装为可配置,此文简单总结一下基本使用。
权限管理方案
基本介绍
授权是用户认证通过根据用户的权限来控制用户访问资源的过程,拥有资源的访问权限则正常访问,没有
权限则拒绝访问。
基于角色
RBAC基于角色的访问控制(Role-Based Access Control)是按角色进行授权,比如:主体的角色为总经理可以查询企业运营报表,查询员工工资信息等,访问控制流程如下:
根据上图中的判断逻辑,授权代码可表示如下:
1 | if(主体.hasRole("总经理角色id")){ |
如果上图中查询工资所需要的角色变化为总经理和部门经理,此时就需要修改判断逻辑为“判断用户的角色是否是
总经理或部门经理”,修改代码如下
1 | if(主体.hasRole("总经理角色id") || 主体.hasRole("部门经理角色id")){ |
我们可以发现当需要修改角色的权限时就需要修改授权的相关代码,系统可扩展性差。考虑是否做成动态配置的?
基于资源
RBAC基于资源的访问控制(Resource-Based Access Control)是按资源(或权限)进行授权,比如:用户必须
具有查询工资权限才可以查询员工工资信息等,访问控制流程如下:
根据上图中的判断,授权代码可以表示为:
1 | if(主体.hasPermission("查询工资权限标识")){ |
优点:系统设计时定义好查询工资的权限标识,即使查询工资所需要的角色变化为总经理和部门经理也不需要修改
授权代码,系统可扩展性强。接口管理粒度更小,可对外提供动态配置。
具体实现流程
后端接口管理
权限表
验证流程
- 获取用户角色
- 获取用户角色具有的资源权限
- 验证访问的当前接口是否在用户权限列表中
前端菜单管理
权限表
验证流程
- 获取用户角色
- 获取用户角色所能访问的菜单栏
- 动态生成菜单栏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 狼族少年、血狼!