Vuex与Vue Router:beforeEnter双重条件验证失效问题求助
问题分析与解决:Vue Router beforeEnter 权限逻辑错误
核心问题:逻辑运算符使用错误
你的需求是「拥有admin权限 或 userHasPermission权限即可访问目标路由」,但当前代码里的if (!admin || !userHasPermission)逻辑完全不符合预期:
- 这个条件会在用户缺少任意一个权限时触发重定向——哪怕用户有admin权限但没有absence权限,或者有absence权限但没有admin权限,都会被跳转到首页。这就是为什么所有用户都无法正常访问的原因。
修正后的代码
正确的逻辑应该是:当用户既没有admin权限,也没有absence权限时,才执行重定向,需要把逻辑运算符从||换成&&:
const routes = { path: `${routerConfig.preRoute}/absence`, beforeEnter: (to, from, next) => { storeInit .then(() => { const admin = store.getters.userIsAdmin; const userHasPermission = store.getters.userIsAbsencesAdmin; // 既无admin权限也无absence权限时,才重定向 if (!admin && !userHasPermission) { next('/'); } else { next(); } }); }, };
更直观的写法(可选)
也可以直接判断「用户拥有任一权限就放行」,逻辑更直白易懂:
const routes = { path: `${routerConfig.preRoute}/absence`, beforeEnter: (to, from, next) => { storeInit .then(() => { const admin = store.getters.userIsAdmin; const userHasPermission = store.getters.userIsAbsencesAdmin; // 拥有任一权限就放行,否则重定向 if (admin || userHasPermission) { next(); } else { next('/'); } }); }, };
内容的提问来源于stack exchange,提问作者kat.stacevitz
相关产品推荐
相关产品推荐

