switch roles will refresh the sidebar correctly
This commit is contained in:
parent
62fb5d1e14
commit
6ee9487d1b
|
@ -7,29 +7,50 @@ import { asyncRouterMap, constantRouterMap } from '@/router'
|
|||
*/
|
||||
function hasPermission(roles, route) {
|
||||
if (route.meta && route.meta.roles) {
|
||||
return roles.some(role => route.meta.roles.indexOf(role) >= 0)
|
||||
return roles.some(role => route.meta.roles.includes(role))
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归过滤异步路由表,返回符合用户角色权限的路由表
|
||||
* 方法优化 避免执行一次以后 对原始 aysncRouterMap 的改动
|
||||
* @param routes asyncRouterMap
|
||||
* @param roles
|
||||
*/
|
||||
function filterAsyncRouter(routes, roles) {
|
||||
const res = []
|
||||
|
||||
routes.forEach(route => {
|
||||
const tmp = { ...route }
|
||||
if (tmp.children) {
|
||||
tmp.children = filterAsyncRouter(tmp.children, roles)
|
||||
}
|
||||
|
||||
hasPermission(roles, tmp) && res.push(tmp)
|
||||
})
|
||||
|
||||
return res
|
||||
}
|
||||
// 原方法 执行一次后 会修改 import 进来的 asyncRouterMap 导致切换权限菜单无法重绘
|
||||
/**
|
||||
* 递归过滤异步路由表,返回符合用户角色权限的路由表
|
||||
* @param asyncRouterMap
|
||||
* @param roles
|
||||
*/
|
||||
function filterAsyncRouter(asyncRouterMap, roles) {
|
||||
const accessedRouters = asyncRouterMap.filter(route => {
|
||||
if (hasPermission(roles, route)) {
|
||||
if (route.children && route.children.length) {
|
||||
route.children = filterAsyncRouter(route.children, roles)
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
})
|
||||
return accessedRouters
|
||||
}
|
||||
// function filterAsyncRouter(asyncRouterMap, roles) {
|
||||
// const accessedRouters = asyncRouterMap.filter(route => {
|
||||
// if (hasPermission(roles, route)) {
|
||||
// if (route.children && route.children.length) {
|
||||
// route.children = filterAsyncRouter(route.children, roles)
|
||||
// }
|
||||
// return true
|
||||
// }
|
||||
// return false
|
||||
// })
|
||||
// return accessedRouters
|
||||
// }
|
||||
|
||||
const permission = {
|
||||
state: {
|
||||
|
@ -47,7 +68,7 @@ const permission = {
|
|||
return new Promise(resolve => {
|
||||
const { roles } = data
|
||||
let accessedRouters
|
||||
if (roles.indexOf('admin') >= 0) {
|
||||
if (roles.includes('admin')) {
|
||||
accessedRouters = asyncRouterMap
|
||||
} else {
|
||||
accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
|
||||
|
|
|
@ -122,7 +122,7 @@ const user = {
|
|||
},
|
||||
|
||||
// 动态修改权限
|
||||
ChangeRoles({ commit }, role) {
|
||||
ChangeRoles({ commit, dispatch }, role) {
|
||||
return new Promise(resolve => {
|
||||
commit('SET_TOKEN', role)
|
||||
setToken(role)
|
||||
|
@ -132,6 +132,7 @@ const user = {
|
|||
commit('SET_NAME', data.name)
|
||||
commit('SET_AVATAR', data.avatar)
|
||||
commit('SET_INTRODUCTION', data.introduction)
|
||||
dispatch('GenerateRoutes', data) // 动态修改权限后 重绘侧边菜单
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue