fix(auth): TBM 페이지 권한 제어 — restricted 플래그 추가

NAV_MENU의 비admin 페이지가 모두 publicPageKeys에 포함되어
개별 권한(user_page_permissions) 체크가 우회되던 기존 설계 이슈 수정.
- work.tbm에 restricted: true 추가
- publicPageKeys 생성 시 restricted 항목 제외
- restricted 페이지는 DB 개별 권한으로만 접근 제어

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-04-01 11:12:50 +09:00
parent 661523e963
commit 9efb8c881a

View File

@@ -117,7 +117,7 @@ async function _fetchPageAccess(userId) {
const NAV_MENU = [
{ cat: null, href: '/pages/dashboard-new.html', icon: 'fa-home', label: '대시보드', key: 'dashboard' },
{ cat: '작업 관리', items: [
{ href: '/pages/work/tbm-mobile.html', icon: 'fa-clipboard-list', label: 'TBM 관리', key: 'work.tbm' },
{ href: '/pages/work/tbm-mobile.html', icon: 'fa-clipboard-list', label: 'TBM 관리', key: 'work.tbm', restricted: true },
{ href: '/pages/work/report-create-mobile.html', icon: 'fa-file-alt', label: '작업보고서 작성', key: 'work.report_create' },
{ href: '/pages/work/analysis.html', icon: 'fa-chart-bar', label: '작업 분석', key: 'work.analysis', admin: true },
{ href: `${_tkqcBase}/`, icon: 'fa-exclamation-triangle', label: '부적합 현황', key: 'work.nonconformity', external: true },
@@ -282,11 +282,11 @@ async function initAuth() {
let accessibleKeys = [];
if (!isAdmin) {
accessibleKeys = await _fetchPageAccess(currentUser.id);
// NAV_MENU에서 admin 아닌 페이지는 모든 인증 사용자에게 공개
// NAV_MENU에서 admin/restricted가 아닌 페이지는 모든 인증 사용자에게 공개
const publicPageKeys = NAV_MENU.flatMap(entry => {
if (!entry.items) return entry.key ? [entry.key] : [];
if (entry.admin) return [];
return entry.items.filter(item => !item.admin).map(item => item.key);
return entry.items.filter(item => !item.admin && !item.restricted).map(item => item.key);
});
// 현재 페이지 접근 권한 확인
const pageKey = _getCurrentPageKey();