fix(permissions): 개인 권한 테이블 불일치 수정

tkuser는 user_page_permissions에 저장하지만 네비/대시보드는
user_page_access에서 읽던 문제. user_page_permissions 기반으로 통일.

- pageAccessRoutes.js: user_page_access → user_page_permissions JOIN
- dashboardModel.js: 개인 권한 쿼리 page_name 기반으로 변경

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-04-01 07:02:56 +09:00
parent 617b6f5c6f
commit f7adbabb0f
2 changed files with 15 additions and 9 deletions

View File

@@ -101,13 +101,17 @@ const DashboardModel = {
});
}
// 개인 권한 페이지 (page_id = pages.id)
// 개인 권한 페이지 (user_page_permissions.page_name 기반)
const [personalRows] = await db.execute(`
SELECT upa.page_id
FROM user_page_access upa
WHERE upa.user_id = ? AND upa.can_access = 1
SELECT upp.page_name
FROM user_page_permissions upp
WHERE upp.user_id = ? AND upp.can_access = 1
`, [userId]);
const personalPageIds = new Set(personalRows.map(r => r.page_id));
const personalPageKeys = new Set();
personalRows.forEach(r => {
const key = r.page_name.startsWith('s1.') ? r.page_name.slice(3) : r.page_name;
personalPageKeys.add(key);
});
// 분류 (부서 우선, 중복 없음 — 권한 있는 페이지만)
const departmentPages = [];
@@ -116,7 +120,7 @@ const DashboardModel = {
for (const page of allPages) {
if (deptPageKeys.has(page.page_key)) {
departmentPages.push(formatPage(page));
} else if (personalPageIds.has(page.id)) {
} else if (personalPageKeys.has(page.page_key)) {
personalPages.push(formatPage(page));
}
}

View File

@@ -84,10 +84,12 @@ router.get('/users/:userId/page-access', requireAuth, async (req, res) => {
p.page_name,
p.page_path,
p.category,
COALESCE(upa.can_access, dpp.can_access, p.is_default_accessible, 0) as can_access,
upa.granted_at
COALESCE(upp.can_access, dpp.can_access, p.is_default_accessible, 0) as can_access,
upp.granted_at
FROM pages p
LEFT JOIN user_page_access upa ON p.id = upa.page_id AND upa.user_id = ?
LEFT JOIN user_page_permissions upp
ON upp.user_id = ?
AND (upp.page_name = CONCAT('s1.', p.page_key) OR upp.page_name = p.page_key)
LEFT JOIN department_page_permissions dpp
ON dpp.department_id = ?
AND (dpp.page_name = CONCAT('s1.', p.page_key) OR dpp.page_name = p.page_key)