权限管理的原理

前言

在一些中后台项目的业务中经常会有给不同的用户看到不同的页面甚至不同的操作权限,这时候权限管理功能就闪亮登场了,用它来给用户赋予不同的角色,给不同的角色设置不同的权限,那么前后端在技术方面具体是如何实现的呢?带着这个问题我们来看下权限管理的流程和实现原理。

实现原理

权限管理大致方案就是给角色分配权限,给用户分配角色。根据业务不同要求的颗粒度不同,如果颗粒度仅限于路由级别,实现思路大致如下

首先,前端需要分别定义一套(不需权限所有已登陆用户都可访问)静态路由表和动态路由表,路由元信息中包含这个路由对应的(和后端定义好的)权限名。

然后, 1.跟后端协商好权限的定义规则,其次,从服务端获取含有用户权限信息的菜单列表然后跟前端自己定义的完整的动态路由表进行递归遍历,如果用户有此页面的权限则添加到用户可访问的路由表中,得到用户有权限访问的路由表; 2.在导航前置守卫中做拦截。token 存在且有效的是权限管理的第一步判断,如果 token 不存在,判断该路由是否在白名单中,如果在则next(),如果不在则重定向至登录页,如果 token 存在再判断(全局状态中)该用户是否有权限,如果有 next(),否则再从服务端获取该用户的权限信息,通过步骤 1,将 1 得到的路由表添加router.addRoutes()到路由表中,并更新全局状态中的路由表,然后 next(),页面渲染出来就是该用户有访问权限的菜单/页面。

如果权限管理颗粒度细到每个操作按钮级别,可以使用自定义指令实现。

首先,编写自定义指令,具体思路:能拿到绑定的元素及该操作需要的权限,如果该用户没有此操作的权限则不显示此按钮。然后在模板中使用该指令。

逻辑流程图

流程图

错误之处欢迎交流指正,感谢~

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2022 Lillian
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信