现在的业务逻辑是这样的:
权限给前端去处理,用户登录后根据用户的返回的key去匹配(就是一个数组,写死的)如果有的话说明没有权限,就是这个key找到了说明没有权限。然后处理时候生成一个新的数组,也就是路由的list。添加给router 然后。。。就进行跳转首页;
前端有2个路由的数组 一个就是动态的(需要经过权限处理的)另`一个就是基础路由 像登录、404之类的。
业务是这样的 给各位看下代码
router.beforeEach((to, from, next) => {
/* 判断登陆状态 */
let user = store.state.user;
console.log(user.isLogin,'user.isLogin');
console.log(router,'登陆之前的路由')
if (user.isLogin) {
// if ((user && typeof user.userRole === 'string' )) {
let { userRole } =user
store.dispatch('GenerateRoutes', { userRole }).then( () => {
router.addRoutes(store.getters.addRouters)
console.log(router,'59')
const redirect = decodeURIComponent(from.query.redirect || to.path)
if (to.path === redirect) {
next({ ...to, replace: true })
} else {
// 跳转到目的路由
next({ path: '/404' })
}
})
// } else {
// track('未登录状态',to,from);
// next({ path: loginRoutePath });
// }
` } else {
next()
}})
这里的store.dispatch('GenerateRoutes', { userRole }).then( () => {}),就是处理下权限的问题,进行过滤
const permission = {
state: {
routers: constantRouterMap,
addRouters: [],
permissionList:[],
},
mutations: {
SET_ROUTERS: (state, routers) => {
state.addRouters = routers
state.routers = constantRouterMap.concat(routers)
console.log( state.routers,'commit执行之后基本路由和动态路由')
}
},
actions: {
GenerateRoutes ({ commit }, data,state) {
return new Promise(resolve => {
const { userRole } = data;
if(userRole ==='ROLE_ADMIN'){
permission.state.permissionList =[];
}else{
permission.state.permissionList = ['recording','account','dictionary'];
}
const accessedRouters = filterAsyncRouter(asyncRouterMap, userRole);
//这里的filterAsyncRouter就是去处理权限路由的,返回给我的就是已经处理好的路由list
commit('SET_ROUTERS', accessedRouters)
resolve()
})
}
}
}
现在的问题就是router.addRoutes(store.getters.addRouters)
这里硬是跳不过去,然后路由也出现了死循环。怎么解?
你这
user.isLogin
是啥,你处理完权限也没改变下状态,那他每次都进来判断,处理完应该修改下这个状态吧