import React, { useState } from 'react'; import { useAuth } from '../contexts/AuthContext'; import './NavigationBar.css'; const NavigationBar = ({ currentPage, onNavigate }) => { const { user, logout, hasPermission, isAdmin, isManager } = useAuth(); const [showUserMenu, setShowUserMenu] = useState(false); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); // 메뉴 항목 정의 (권한별) const menuItems = [ { id: 'dashboard', label: '대시보드', icon: '📊', path: '/dashboard', permission: null, // 모든 사용자 접근 가능 description: '전체 현황 보기' }, { id: 'projects', label: '프로젝트 관리', icon: '📋', path: '/projects', permission: 'project.view', description: '프로젝트 등록 및 관리' }, { id: 'bom', label: 'BOM 관리', icon: '📄', path: '/bom', permission: 'bom.view', description: 'BOM 파일 업로드 및 분석' }, { id: 'materials', label: '자재 관리', icon: '🔧', path: '/materials', permission: 'bom.view', description: '자재 목록 및 비교' }, { id: 'purchase', label: '구매 관리', icon: '💰', path: '/purchase', permission: 'project.view', description: '구매 확인 및 관리' }, { id: 'files', label: '파일 관리', icon: '📁', path: '/files', permission: 'file.upload', description: '파일 업로드 및 관리' }, { id: 'users', label: '사용자 관리', icon: '👥', path: '/users', permission: 'user.view', description: '사용자 계정 관리', adminOnly: true }, { id: 'system', label: '시스템 설정', icon: '⚙️', path: '/system', permission: 'system.admin', description: '시스템 환경 설정', adminOnly: true } ]; // 사용자가 접근 가능한 메뉴만 필터링 const accessibleMenuItems = menuItems.filter(item => { // 관리자 전용 메뉴 체크 if (item.adminOnly && !isAdmin() && !isManager()) { return false; } // 권한 체크 if (item.permission && !hasPermission(item.permission)) { return false; } return true; }); const handleLogout = async () => { try { await logout(); setShowUserMenu(false); } catch (error) { console.error('Logout failed:', error); } }; const handleMenuClick = (item) => { onNavigate(item.id); setIsMobileMenuOpen(false); }; const getRoleDisplayName = (role) => { const roleMap = { 'admin': '관리자', 'system': '시스템', 'leader': '팀장', 'support': '지원', 'user': '사용자' }; return roleMap[role] || role; }; const getAccessLevelDisplayName = (level) => { const levelMap = { 'manager': '관리자', 'leader': '팀장', 'worker': '작업자', 'viewer': '조회자' }; return levelMap[level] || level; }; return ( ); }; export default NavigationBar;