面试题答案
一键面试在Vue Router中,可以通过router.beforeEach
来设置全局前置守卫。以下是代码实现:
import router from './router'
import { getCurrentUserPermissions } from './utils/auth' // 假设这是获取用户权限的函数
router.beforeEach((to, from, next) => {
if (to.path.startsWith('/product') && to.query.category === 'electronics') {
const userPermissions = getCurrentUserPermissions()
if (!userPermissions.includes('electronics')) {
next('/login')
} else {
next()
}
} else {
next()
}
})
为什么这样处理:
- 路径匹配:使用
to.path.startsWith('/product')
确保路径是以/product
开头,再结合to.query.category === 'electronics'
来匹配特定的查询字符串,这样就能精准定位到需要进行权限验证的路由。 - 权限获取与验证:调用
getCurrentUserPermissions
函数获取用户当前的权限,然后检查权限列表中是否包含electronics
权限。 - 重定向处理:如果用户没有相应权限,使用
next('/login')
将用户重定向到登录页面;如果有权限,则使用next()
继续导航。对于其他不匹配的路由,则直接使用next()
让用户正常访问。