import { asyncRouterMap, constantRouterMap } from '@/router' /** * 通过meta.role判断是否与当前用户权限匹配 * @param roles * @param route */ function hasPermission(roles, route) { debugger if (route.meta && route.meta.roles) { return roles.some(role => route.meta.roles.indexOf(role) >= 0) } else { return true } } /** * 递归过滤异步路由表,返回符合用户角色权限的路由表 * @param asyncRouterMap * @param roles */ function filterAsyncRouter(asyncRouterMap, roles) { // 闭包查找所有该roles下的路由 console.log(asyncRouterMap, roles) // debugger const accessedRouters = asyncRouterMap.filter(route => { // const temp = [] console.log(roles, route, route.children) route.children = route.children.filter(v => { // console.log(roles, v) console.log(v,v.meta) if (v.meta && v.meta.roles && (v.meta.roles[0] == roles[0])) { console.log(v.meta.roles[0] == roles[0]) return true } else { return false } }) console.log(9,route.children) return route // if (hasPermission(roles, route.childer)) { // if (route.children && route.children.length) { // // route.children = filterAsyncRouter(route.children, roles) // } // return true // } // return false }) console.log(accessedRouters) return accessedRouters } const permission = { state: { routers: constantRouterMap, addRouters: [] }, mutations: { SET_ROUTERS: (state, routers) => { state.addRouters = routers state.routers = constantRouterMap.concat(routers) console.log('state.routers', state.routers) } }, actions: { GenerateRoutes({ commit }, data) { return new Promise(resolve => { const { roles } = data let accessedRouters console.log(asyncRouterMap, roles) accessedRouters = filterAsyncRouter(asyncRouterMap, roles) // 否则根据权限搜索路由 // accessedRouters = '' console.log('accessedRouters', accessedRouters) commit('SET_ROUTERS', accessedRouters) resolve() }) } } } export default permission