From 525dbd77d485d3131cdb69736531bc6c64315438 Mon Sep 17 00:00:00 2001 From: JooWangi Date: Wed, 10 Jun 2026 09:22:10 +0900 Subject: [PATCH] feat(nav): restrict admin menu to only display dashboard tab --- src/components/Navigation.ts | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/components/Navigation.ts b/src/components/Navigation.ts index 5f3e5bd..0d2cebe 100644 --- a/src/components/Navigation.ts +++ b/src/components/Navigation.ts @@ -32,6 +32,23 @@ export function renderNavigation(onTabChange: (tab: string) => void) { // 기존 메뉴 렌더링 (Object.keys(MENU_CONFIG) as Array).forEach(catKey => { const config = MENU_CONFIG[catKey]; + + // 역할에 따라 노출할 서브탭 필터링 + const visibleTabs = config.tabs.filter((tab: string) => { + if (state.currentUserRole === 'admin') { + // 관리자(admin)일 경우 대시보드 탭만 노출 + return tab === '대시보드'; + } else { + // 실무자(user)일 경우 대시보드 제외한 모든 탭 노출 + return tab !== '대시보드'; + } + }); + + // 노출할 서브탭이 없으면 해당 대분류 GNB 메뉴도 렌더링하지 않음 + if (visibleTabs.length === 0) { + return; + } + const isActive = state.activeCategory === catKey; const group = document.createElement('div'); @@ -40,14 +57,6 @@ export function renderNavigation(onTabChange: (tab: string) => void) { const trigger = document.createElement('div'); trigger.className = 'gnb-trigger'; trigger.textContent = config.label; - - // 역할에 따라 노출할 서브탭 필터링 - const visibleTabs = config.tabs.filter((tab: string) => { - if (tab === '대시보드' && state.currentUserRole !== 'admin') { - return false; - } - return true; - }); trigger.addEventListener('click', () => { if (state.activeCategory !== catKey) {