diff --git a/src/components/Navigation.ts b/src/components/Navigation.ts index d22cd0a..5f3e5bd 100644 --- a/src/components/Navigation.ts +++ b/src/components/Navigation.ts @@ -41,10 +41,18 @@ export function renderNavigation(onTabChange: (tab: string) => void) { 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) { state.activeCategory = catKey as any; - const firstTab = config.tabs[0]; + const firstTab = visibleTabs[0] || config.tabs[0]; state.activeSubTab = firstTab; render(); onTabChange(firstTab); @@ -55,7 +63,7 @@ export function renderNavigation(onTabChange: (tab: string) => void) { const shelf = document.createElement('div'); shelf.className = 'lnb-shelf'; - config.tabs.forEach((tab: string) => { + visibleTabs.forEach((tab: string) => { const item = document.createElement('div'); item.className = `lnb-item ${isActive && state.activeSubTab === tab ? 'active' : ''}`; item.textContent = tab; @@ -73,24 +81,26 @@ export function renderNavigation(onTabChange: (tab: string) => void) { navContainer.appendChild(group); }); - // ─── '관리자' 메뉴 별도 추가 (GNB 스타일) ─── - const adminGroup = document.createElement('div'); - adminGroup.className = 'nav-group'; - - const adminTrigger = document.createElement('div'); - adminTrigger.className = 'gnb-trigger'; - adminTrigger.innerHTML = '관리자'; - adminTrigger.style.color = 'var(--text-muted)'; - adminTrigger.style.borderLeft = '1px solid var(--border-color)'; - adminTrigger.style.marginLeft = '1rem'; - adminTrigger.style.paddingLeft = '1.5rem'; - - adminTrigger.addEventListener('click', () => { - window.open('/map_editor.html', '_blank'); - }); - - adminGroup.appendChild(adminTrigger); - navContainer.appendChild(adminGroup); + // ─── '관리자' 메뉴 별도 추가 (GNB 스타일 - 관리자 역할일 때만 노출) ─── + if (state.currentUserRole === 'admin') { + const adminGroup = document.createElement('div'); + adminGroup.className = 'nav-group'; + + const adminTrigger = document.createElement('div'); + adminTrigger.className = 'gnb-trigger'; + adminTrigger.innerHTML = '관리자'; + adminTrigger.style.color = 'var(--text-muted)'; + adminTrigger.style.borderLeft = '1px solid var(--border-color)'; + adminTrigger.style.marginLeft = '1rem'; + adminTrigger.style.paddingLeft = '1.5rem'; + + adminTrigger.addEventListener('click', () => { + window.open('/map_editor.html', '_blank'); + }); + + adminGroup.appendChild(adminTrigger); + navContainer.appendChild(adminGroup); + } }; render();