46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
// ✅ /js/load-sidebar.js (access_level 기반 메뉴 필터링)
|
|
document.addEventListener('DOMContentLoaded', async () => {
|
|
try {
|
|
// 1) 사이드바 HTML 로딩
|
|
const res = await fetch('/components/sidebar.html');
|
|
const html = await res.text();
|
|
document.getElementById('sidebar-container').innerHTML = html;
|
|
|
|
// 2) 토큰 존재 확인
|
|
const token = localStorage.getItem('token');
|
|
if (!token) return;
|
|
|
|
// 3) JWT 파싱해서 access_level 추출
|
|
let access;
|
|
try {
|
|
const payload = JSON.parse(atob(token.split('.')[1]));
|
|
access = payload.access_level;
|
|
} catch (err) {
|
|
console.warn('JWT 파싱 실패:', err);
|
|
return;
|
|
}
|
|
|
|
// 4) 시스템 계정은 전부 유지
|
|
if (access === 'system') return;
|
|
|
|
// 5) 클래스 이름 목록
|
|
const classMap = [
|
|
'worker-only',
|
|
'group-leader-only',
|
|
'support-only',
|
|
'admin-only',
|
|
'system-only'
|
|
];
|
|
|
|
// 6) 본인 권한에 해당하지 않는 요소 제거
|
|
classMap.forEach(cls => {
|
|
const required = cls.replace('-only', '').replace('-', '_'); // 'group-leader-only' → 'group_leader'
|
|
if (access !== required) {
|
|
document.querySelectorAll(`.${cls}`).forEach(el => el.remove());
|
|
}
|
|
});
|
|
|
|
} catch (err) {
|
|
console.error('🔴 사이드바 로딩 실패:', err);
|
|
}
|
|
}); |