diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js index 926c89b0fb2a23bb5e97575c56f3767d692f34e3..93996741c3050dfea3569cf632bcc17004971689 100644 --- a/src/store/modules/permission.js +++ b/src/store/modules/permission.js @@ -8,6 +8,26 @@ function hasPermission(roles, route) { } } +/** + * 递归过滤异æ¥è·¯ç”±è¡¨ï¼Œè¿”回符åˆç”¨æˆ·è§’色æƒé™çš„路由表 + * @param asyncRouterMap + * @param roles + * @returns {Array.<T>|*} + */ +function filterAsyncRouter(asyncRouterMap, roles) { + let 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: { routers: constantRouterMap, @@ -25,23 +45,12 @@ const permission = { GenerateRoutes({ commit }, data) { return new Promise(resolve => { const { roles } = data; - const accessedRouters = asyncRouterMap.filter(v => { - if (roles.indexOf('admin') >= 0) return true; - if (hasPermission(roles, v)) { - if (v.children && v.children.length > 0) { - v.children = v.children.filter(child => { - if (hasPermission(roles, child)) { - return child - } - return false; - }); - return v - } else { - return v - } - } - return false; - }); + let accessedRouters + if (roles.indexOf('admin') >= 0) { + accessedRouters = asyncRouterMap + } else { + accessedRouters = filterAsyncRouter(asyncRouterMap, roles) + } commit('SET_ROUTERS', accessedRouters); resolve(); })