一、概念
RBAC 全称是Role-Based Access Control基于角色的访问控制,是一种广泛应用于信息系统中的权限管理模型,它通过将权限分配给角色,再将角色分配给用户,简化和集中化权限管理,相比(ACL)直接给用户分配权限更灵活也更容易维护,三者间都是多对多关系
原理:
- 角色分配:管理员根据组织结构和业务流程创建不同的角色,并明确每个角色应具备哪些权限。
- 用户授权:然后,将这些角色分配给相应的用户。一个用户可以拥有多个角色,从而获得这些角色所包含的所有权限。
- 权限验证:当用户尝试访问某个资源或执行某些操作时,系统会检查该用户是否具有所需的角色和权限。只有当用户被授予了适当的权限时,才允许进行操作。
二、RBAC前端权限管理
2.1、前言
在Web 系统中,权限很久以来一直都只是后端程序所控制的。 为什么呢? 因为Web 系统的不质围绕的是数据, 而和数据库最紧密接触的是后端程序。所以在很长的一段时间内, 权限一直都只是后端程序要考虑的话题。 但是随着前后端分离架构的流行,越来越多的项目也在前端进行权限控制。
2.2、 菜单权限控制
目的:在登录请求中,会得到后端返回的权限数据,当然,这个需要后端返回数据的支持 前端根据权限数据,展示对应的菜单。点击菜单,才能查看相关的界面
相关技术:使用状态管理工具vuex进行存储请求回来的数据,需要使用sessionstorage同步存储菜单列表数据
2.3、(路由)界面权限控制
目的
- 如果用户没有登录,手动在地址栏敲入管理界面的地址, 则需要跳转到登录界面
- 如果用户已经登录, 如果手动敲入非权限内的地址, 则需要跳转404 界面
相关技术
路由守卫:
- 判断有无token,没有再判断是否在白名单内,如果也不在就直接跳转到登录页
- 如果有token,会先判断跳转的目标地址是否是登录页,不是就进行用户权限校验有无角色信息,获取其权限
动态路由:根据拿到的角色信息权限点,获取转换成前端能添加的路由表信息格式进行动态添加
注意:如果我们重新刷新的话动态路由就会消失,动态路由是在登录成功之后才会调用的,刷新的时候并没有调用,所以动态路由没有添加上
解决: 可以在app.vue中的created中调用添加动态路由的方法
2.4、 按钮权限控制
目的:在某个菜单的界面中,还得根据权限数据, 展示出可进行操作的按钮,比如删除,修改,增加
相关技术:自定义指令v-permission,通过判断当前的路由对应的组件中,用户是否具备v-permission中的权限,不具备则进行对应操作(移除或禁用)
2.5、 接口权限控制
目的:如果用户通过非常规操作,比如通过浏览器调试工具将某些禁用的按钮变成启用状态,此时发的请求,也应该被前端所拦截。
相关技术:
请求控制:设置请求拦截器,不是登录的请求,请求头携带token,非权限的请求,通过action判断当前路由权限,进行处理
响应控制:设置响应拦截器,对返回状态码判断401,则返回到登录界面
三、场景应用举例
- 企业资源规划 (ERP) 系统
- 客户关系管理 (CRM) 系统
- 人力资源管理系统 (HRMS)
- 办公自动化系统(OA)
- 供应链管理系统 (SCM)
- 主要是2b,以及Saas 系统