// ✅ /js/auth-check.js // 토큰 검증과 권한 체크 const token = localStorage.getItem('token'); function isValidJWT(token) { return typeof token === 'string' && token.split('.').length === 3; } function getPayload(token) { try { return JSON.parse(atob(token.split('.')[1])); } catch { return null; } } if (!token || !isValidJWT(token)) { console.log('🚨 토큰이 없거나 유효하지 않음'); localStorage.removeItem('token'); localStorage.removeItem('user'); window.location.href = '/index.html'; } else { const user = getPayload(token); const storedUser = JSON.parse(localStorage.getItem('user') || '{}'); console.log('🔐 JWT 사용자 정보:', user); console.log('💾 저장된 사용자 정보:', storedUser); // 사용자 정보 우선순위: localStorage > JWT payload const currentUser = storedUser.access_level ? storedUser : user; if (!currentUser || !currentUser.username || !currentUser.access_level) { console.log('🚨 사용자 정보가 유효하지 않음'); localStorage.removeItem('token'); localStorage.removeItem('user'); window.location.href = '/index.html'; } else { console.log('✅ 인증 성공:', currentUser.username, currentUser.access_level); // 사용자 이름 표시 const userNameElements = document.querySelectorAll('#user-name, .user-name'); userNameElements.forEach(el => { if (el) el.textContent = currentUser.name || currentUser.username; }); // 🎯 역할별 메뉴 표시/숨김 처리 const accessLevel = currentUser.access_level; // 관리자 전용 메뉴 if (accessLevel !== 'admin' && accessLevel !== 'system') { const adminOnly = document.querySelectorAll('.admin-only, .system-only'); adminOnly.forEach(el => el.remove()); } // 그룹장 전용 메뉴 if (accessLevel !== 'group_leader') { const groupLeaderOnly = document.querySelectorAll('.group-leader-only'); groupLeaderOnly.forEach(el => el.remove()); } // 지원팀 전용 메뉴 if (accessLevel !== 'support') { const supportOnly = document.querySelectorAll('.support-only'); supportOnly.forEach(el => el.remove()); } // 일반 작업자 전용 메뉴 if (accessLevel !== 'worker' && accessLevel !== 'user') { const workerOnly = document.querySelectorAll('.worker-only'); workerOnly.forEach(el => el.remove()); } // 전역 사용자 정보 저장 window.currentUser = currentUser; console.log('🎭 역할별 메뉴 필터링 완료:', accessLevel); } }