mirror of
https://github.com/PanJiaChen/vue-element-admin.git
synced 2025-04-06 03:57:53 +08:00
63 lines
1.4 KiB
JavaScript
63 lines
1.4 KiB
JavaScript
import { asyncRouterMap, constantRouterMap } from 'src/router';
|
|
|
|
function hasPermission(roles, route) {
|
|
if (route.meta && route.meta.role) {
|
|
return roles.some(role => route.meta.role.indexOf(role) >= 0)
|
|
} else {
|
|
return true
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 递归过滤异步路由表,返回符合用户角色权限的路由表
|
|
* @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,
|
|
addRouters: []
|
|
},
|
|
|
|
mutations: {
|
|
SET_ROUTERS: (state, routers) => {
|
|
state.addRouters = routers;
|
|
state.routers = constantRouterMap.concat(routers);
|
|
}
|
|
},
|
|
|
|
actions: {
|
|
GenerateRoutes({ commit }, data) {
|
|
return new Promise(resolve => {
|
|
const { roles } = data;
|
|
let accessedRouters
|
|
if (roles.indexOf('admin') >= 0) {
|
|
accessedRouters = asyncRouterMap
|
|
} else {
|
|
accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
|
|
}
|
|
commit('SET_ROUTERS', accessedRouters);
|
|
resolve();
|
|
})
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
export default permission;
|