feat: 초기 프로젝트 설정 및 룰.md 파일 추가
This commit is contained in:
79
web-ui/js/auth-check.js
Normal file
79
web-ui/js/auth-check.js
Normal file
@@ -0,0 +1,79 @@
|
||||
// ✅ /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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user