使用addRoutes重构权限
This commit is contained in:
51
src/store/modules/permission.js
Normal file
51
src/store/modules/permission.js
Normal file
@@ -0,0 +1,51 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
const permission = {
|
||||
state: {
|
||||
routers: constantRouterMap,
|
||||
addRouters: []
|
||||
},
|
||||
|
||||
mutations: {
|
||||
SET_ROUTERS: (state, routers) => {
|
||||
state.addRouters = routers;
|
||||
state.routers = constantRouterMap.concat(routers);
|
||||
}
|
||||
},
|
||||
|
||||
actions: {
|
||||
// s
|
||||
GenerateRoutes({ commit }, data) {
|
||||
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;
|
||||
});
|
||||
commit('SET_ROUTERS', accessedRouters);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export default permission;
|
Reference in New Issue
Block a user