前端权限控制--路由权限(+菜单路由同步)

868 阅读2分钟
1.创建角色,绑定权限数据

2.创建员工,绑定角色,获取角色权限数据

3.将路由表routes分为静态路由表routes和动态路由表asyncRoutes,把需要做权限判断的路由放到动态路由表,
并给每个动态路由添加对应的权限标识,路由系统初始化时只绑定展开的静态路由表

4.使用员工账号登录,获取账号权限数据,根据动态路由表具体需求,格式化权限数据

5.使用格式化权限数据筛选动态路由表,将筛选得到的动态路由表通过router.addRoute()添加到路由系统中(注意特殊
角色判断,特殊角色返回的权限数据一般比较特殊,所以筛选得到的动态路由表可能不符合实际角色权限,需要单独确
定动态路由表)

6.当登录状态失效,无论是token过期还是主动退出登录,都应该重置路由并且清空用户信息,以便下次登录重新获取
用户信息并筛选动态路由,否则下次登录,路由系统中还是上一次登录的用户所拥有的路由权限

//手动重置路由
create newRouter = createRouter()
router.matcher = newRouter.matcher
//清空用户信息
this.$store.commit('user/delUserProfile')

//上述代码除了要写在退出登录按钮的回调函数中,还要写在axios响应拦截器对于401的错误处理逻辑中

完成这一步,已经基本实现了通过RBAC控制路由权限的目的,每一个账号都匹配了角色的权限路由,只能
访问当前账号所属角色有权限数据的路由

7.一般路由跳转在页面中都有对应路由菜单辅助,角色没有权限访问的路由不需要显示到角色的路由菜单中,实现过程
是:将筛选得到的动态路由表存到vuex中,将通过路由系统初始化的静态路由表router.options.routes控制的路由菜
单,改为由vuex响应式数据控制,实现路由菜单与账号动态路由表+静态路由表同步。