一、思路
动态角色、动态菜单基本都是后端的事情了(两个表的事情)
- 设计方面:
- 动态角色:是配置配置两个权限数组,一个放置当前用户的全部角色,一个放置当前用户的当前角色(即一个时候只能使用一个角色)
- 动态菜单:在每次layout刷新时调当前角色对应的菜单(这个是配置在数据库中,一个角色会给他分配哪些菜单,菜单是由前端先写上全部,然后再自己根据需要来选择)。
- 动态路由:每次获取到菜单时,存入
session
缓存中,在需要跳转页面时,通过路由守卫(前置)beforeEach
,对缓存中的菜单进行递归获取,然后判断是否能够进入该页面,否则重定向403
二、动态路由获取缓存中的菜单
不多说,上代码!
这个前置路由守卫有一些需要注意的地方,主要是
next()
,当next('/403')
这样内部有值的时候,他会进行重定向(即还要再次进入一次beforeEach
)这样尤其容易导致无限循环,所以,后面的else{next()}
这样是必须的,不然条件一个不对就一直循环,十分之坑!!!
beforeEach: (to, from, next) => {
//获取session缓存
const m = getStorage(MY_MENU_CACHE_KEY)
//标记是否能够进入
let bo = false
//这是递归菜单的路径(因为是多重children的对象)
const