From 329a5d1c5c8fca3a8a9a21f6f302ba5dda4e3311 Mon Sep 17 00:00:00 2001 From: jingrow Date: Wed, 19 Nov 2025 01:42:00 +0800 Subject: [PATCH] Restrict menu visibility for non-System Users --- .../frontend/src/shared/stores/menu.ts | 23 +++++++++++++--- .../src/views/settings/MenuManager.vue | 27 ++++++++++++++++--- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/apps/jingrow/frontend/src/shared/stores/menu.ts b/apps/jingrow/frontend/src/shared/stores/menu.ts index de31909..bced554 100644 --- a/apps/jingrow/frontend/src/shared/stores/menu.ts +++ b/apps/jingrow/frontend/src/shared/stores/menu.ts @@ -176,9 +176,26 @@ export const useMenuStore = defineStore('menu', () => { // 过滤隐藏的菜单项 if (m.hidden) return false - // 非 System User 过滤掉 pagetype 和 workspace 类型 - if (!isSystemUser && (m.type === 'pagetype' || m.type === 'workspace')) { - return false + // 非 System User 的过滤逻辑 + if (!isSystemUser) { + // 过滤掉 pagetype 和 workspace 类型 + if (m.type === 'pagetype' || m.type === 'workspace') { + return false + } + + // 只允许显示的根菜单:工具、开发、菜单管理、设置 + const allowedRootMenus = ['tools', 'dev-group', 'menuManager', 'settings'] + if (!m.parentId && !allowedRootMenus.includes(m.id)) { + return false + } + + // 开发分组下只允许显示:应用市场、节点市场、智能体市场 + if (m.parentId === 'dev-group') { + const allowedDevMenus = ['app-marketplace', 'node-marketplace', 'agent-marketplace'] + if (!allowedDevMenus.includes(m.id)) { + return false + } + } } return true diff --git a/apps/jingrow/frontend/src/views/settings/MenuManager.vue b/apps/jingrow/frontend/src/views/settings/MenuManager.vue index 8bc247e..ee8b160 100644 --- a/apps/jingrow/frontend/src/views/settings/MenuManager.vue +++ b/apps/jingrow/frontend/src/views/settings/MenuManager.vue @@ -164,10 +164,31 @@ const filteredItems = computed(() => { const isSystemUser = userType === 'System User' return menuStore.items.filter(m => { - // 非 System User 过滤掉 pagetype 和 workspace 类型 - if (!isSystemUser && (m.type === 'pagetype' || m.type === 'workspace')) { - return false + // 过滤隐藏的菜单项 + if (m.hidden) return false + + // 非 System User 的过滤逻辑 + if (!isSystemUser) { + // 过滤掉 pagetype 和 workspace 类型 + if (m.type === 'pagetype' || m.type === 'workspace') { + return false + } + + // 只允许显示的根菜单:工具、开发、菜单管理、设置 + const allowedRootMenus = ['tools', 'dev-group', 'menuManager', 'settings'] + if (!m.parentId && !allowedRootMenus.includes(m.id)) { + return false + } + + // 开发分组下只允许显示:应用市场、节点市场、智能体市场 + if (m.parentId === 'dev-group') { + const allowedDevMenus = ['app-marketplace', 'node-marketplace', 'agent-marketplace'] + if (!allowedDevMenus.includes(m.id)) { + return false + } + } } + return true }) })