task-32(会话/菜单/权限): 普通用户菜单 key 查找下沉为共享纯函数
hasMenuKey 深度优先查找(空 key/空树返回 false,不改输入)抽到 helpers 供 守卫复用,去掉路由内私有 hasMenu 副本。8 用例全过。
This commit is contained in:
@@ -12,3 +12,23 @@ export function firstVisiblePath(nodes: AdminMenuNode[] | null | undefined): str
|
||||
}
|
||||
return ''
|
||||
}
|
||||
|
||||
/** 菜单树中是否含指定 key(深度优先递归;空 key/空树一律 false)。 */
|
||||
export function hasMenuKey(nodes: AdminMenuNode[] | null | undefined, key: string): boolean {
|
||||
if (!key) return false
|
||||
return (nodes || []).some((node) => node.key === key || hasMenuKey(node.children || [], key))
|
||||
}
|
||||
|
||||
/**
|
||||
* 页面级路由准入:无 menuKey 的开放页放行;超级管理员可进全部;其余须在
|
||||
* 本人菜单树中命中 key。后端已过滤菜单,此处只做前端路由级兜底。
|
||||
*/
|
||||
export function isRouteAllowed(
|
||||
isSuperAdmin: boolean,
|
||||
menuKey: string | undefined,
|
||||
menuTree: AdminMenuNode[] | null | undefined,
|
||||
): boolean {
|
||||
if (!menuKey) return true
|
||||
if (isSuperAdmin) return true
|
||||
return hasMenuKey(menuTree, menuKey)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user