diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js index ce1aafa6..97de701e 100644 --- a/src/store/modules/permission.js +++ b/src/store/modules/permission.js @@ -7,7 +7,7 @@ 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 } @@ -15,20 +15,23 @@ function hasPermission(roles, route) { /** * 递归过滤异步路由表,返回符合用户角色权限的路由表 - * @param asyncRouterMap + * @param routes 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) +function filterAsyncRouter(routes, roles) { + const res = [] + + routes.forEach(route => { + const tmp = { ...route } + if (hasPermission(roles, tmp)) { + if (tmp.children) { + tmp.children = filterAsyncRouter(tmp.children, roles) } - return true + res.push(tmp) } - return false }) - return accessedRouters + + return res } const permission = { @@ -47,7 +50,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() }) })