fix: 无权限时禁止展示全部菜单与路由

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-06 18:28:25 +08:00
parent 1a5c8aab88
commit 5b89e1b3c8
3 changed files with 17 additions and 11 deletions

View File

@@ -324,7 +324,7 @@ const router = createRouter({
/** 详情页等子路由:父模块在 visible_paths 中即允许访问 */ /** 详情页等子路由:父模块在 visible_paths 中即允许访问 */
function isRouteAllowed(path, visiblePaths) { function isRouteAllowed(path, visiblePaths) {
if (!visiblePaths?.length) return true if (!visiblePaths?.length) return false
if (visiblePaths.some((p) => p && (path === p || path.startsWith(`${p}/`)))) { if (visiblePaths.some((p) => p && (path === p || path.startsWith(`${p}/`)))) {
return true return true
} }
@@ -372,12 +372,16 @@ router.beforeEach(async (to, from, next) => {
const access = getMenuAccess() const access = getMenuAccess()
if (!isMenuSessionFresh()) { if (to.path === '/welcome') {
next() next()
return return
} }
if (to.path === '/welcome') { if (!access || !isMenuSessionFresh()) {
if (to.path !== '/welcome') {
next('/welcome')
return
}
next() next()
return return
} }

View File

@@ -3,7 +3,7 @@ const CLUB_SCOPE_KEY = 'admin_club_scope';
const CLUB_CONTEXT_KEY = 'admin_club_context'; const CLUB_CONTEXT_KEY = 'admin_club_context';
const MENU_ACCESS_KEY = 'kefu_menu_access'; const MENU_ACCESS_KEY = 'kefu_menu_access';
const MENU_SESSION_KEY = 'kefu_menu_session_v'; const MENU_SESSION_KEY = 'kefu_menu_session_v';
const MENU_SESSION_VERSION = '12'; const MENU_SESSION_VERSION = '13';
const DEFAULT_CLUB_ID = 'xq'; const DEFAULT_CLUB_ID = 'xq';
let menuAccessInflight = null; let menuAccessInflight = null;
@@ -41,6 +41,8 @@ export function mergeServerClubContext(serverCtx) {
} }
} else if (prevScope === 'all' && serverCtx.is_group_admin) { } else if (prevScope === 'all' && serverCtx.is_group_admin) {
scopeKey = 'all'; scopeKey = 'all';
} else if (!allowedIds.has(clubId) && allowedIds.size > 0) {
clubId = serverCtx.club_id || [...allowedIds][0] || DEFAULT_CLUB_ID;
} }
const merged = { const merged = {
@@ -102,8 +104,7 @@ export function isMenuSessionFresh() {
} }
export function shouldShowAllMenus(access) { export function shouldShowAllMenus(access) {
if (!isMenuSessionFresh()) return true; if (!access) return false;
if (!access) return true;
if (Array.isArray(access.visible_page_ids) && access.visible_page_ids.length > 0) { if (Array.isArray(access.visible_page_ids) && access.visible_page_ids.length > 0) {
return false; return false;
} }
@@ -113,7 +114,7 @@ export function shouldShowAllMenus(access) {
if (Array.isArray(access.permission_codes) && access.permission_codes.length > 0) { if (Array.isArray(access.permission_codes) && access.permission_codes.length > 0) {
return false; return false;
} }
return true; return false;
} }
/** ??? kefu_menu_definitions ???visible_paths ???? permission_codes ?? */ /** ??? kefu_menu_definitions ???visible_paths ???? permission_codes ?? */

View File

@@ -526,10 +526,11 @@ const clubRoleBlocks = computed(() => {
}) })
const visibleClubRoleBlocks = computed(() => { const visibleClubRoleBlocks = computed(() => {
if (canManageClubAssignments.value) { return clubRoleBlocks.value.filter((b) => {
return clubRoleBlocks.value const cid = b.club_id || ''
} if (canManageClubAssignments.value) return true
return clubRoleBlocks.value.filter((b) => canManageRolesForClub(b.club_id)) return manageableClubIds.value.includes(cid)
})
}) })
// 添加用户弹窗 // 添加用户弹窗