diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js index ce1aafa6..9fd80970 100644 --- a/src/store/modules/permission.js +++ b/src/store/modules/permission.js @@ -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) diff --git a/src/store/modules/user.js b/src/store/modules/user.js index 13e76399..0f7e2296 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -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() }) })