fix: 切换账户后路由权限校验 — 防止通过旧标签/URL访问无权限页面
根因: router.beforeEach 在角色加载后 return true,不检查目标路由 是否在当前用户已注册的路由列表中。导致切换账户后,通过旧标签 或直接输入 URL 可访问前一个用户的页面。 修复: 在 return true 前增加 router.resolve() 检查,若目标路由 未注册(matched.length === 0)则拦截并提示无权访问。 数据库验证: 护士角色(role_id=201)确实没有住院医生工作站 (menu_id=288)的 sys_role_menu 权限,后端 getRouters 返回 正确。问题纯粹在前端路由守卫。
This commit is contained in:
@@ -71,6 +71,14 @@ router.beforeEach(async (to, from) => {
|
||||
return { path: '/login' }
|
||||
}
|
||||
}
|
||||
// 铁律: 路由权限校验 — 目标路由必须在已注册的路由中存在
|
||||
// 防止切换账户后,通过旧标签或直接输入 URL 访问无权限页面
|
||||
const resolved = router.resolve(to)
|
||||
if (resolved.matched.length === 0 || resolved.name === 'NotFound') {
|
||||
// 路由不存在(未注册),拒绝导航
|
||||
ElMessage.warning('无权访问该页面')
|
||||
return { path: '/' }
|
||||
}
|
||||
return true
|
||||
} else {
|
||||
if (isWhiteList(to.path)) {
|
||||
|
||||
Reference in New Issue
Block a user