From 6b584f9881fb9034d904dacd4ff26647f91ffb4c Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Mon, 30 Mar 2026 14:10:30 +0900 Subject: [PATCH] =?UTF-8?q?fix(dashboard):=20department=5Fpage=5Fpermissio?= =?UTF-8?q?ns=20=EC=8A=A4=ED=82=A4=EB=A7=88=20=EB=A7=9E=EC=B6=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit page_id(없음) → page_name으로 조회, pages.page_key로 매칭. 실제 DB 구조와 shared/middleware/pagePermission.js 패턴 일치. Co-Authored-By: Claude Opus 4.6 (1M context) --- system1-factory/api/models/dashboardModel.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/system1-factory/api/models/dashboardModel.js b/system1-factory/api/models/dashboardModel.js index 1568db9..130f800 100644 --- a/system1-factory/api/models/dashboardModel.js +++ b/system1-factory/api/models/dashboardModel.js @@ -84,18 +84,18 @@ const DashboardModel = { }; } - // 부서 권한 페이지 - let deptPageIds = new Set(); + // 부서 권한 페이지 (page_name = pages.page_key) + let deptPageKeys = new Set(); if (departmentId) { const [deptRows] = await db.execute(` - SELECT dpp.page_id + SELECT dpp.page_name FROM department_page_permissions dpp WHERE dpp.department_id = ? AND dpp.can_access = 1 `, [departmentId]); - deptRows.forEach(r => deptPageIds.add(r.page_id)); + deptRows.forEach(r => deptPageKeys.add(r.page_name)); } - // 개인 권한 페이지 + // 개인 권한 페이지 (page_id = pages.id) const [personalRows] = await db.execute(` SELECT upa.page_id FROM user_page_access upa @@ -106,14 +106,14 @@ const DashboardModel = { // 기본 접근 페이지 const defaultPages = allPages.filter(p => !p.is_admin_only); - // 분류 + // 분류 (부서 우선, 중복 없음) const departmentPages = []; const personalPages = []; for (const page of allPages) { if (page.is_admin_only) continue; - if (deptPageIds.has(page.id)) { + if (deptPageKeys.has(page.page_key)) { departmentPages.push(formatPage(page)); } else if (personalPageIds.has(page.id)) { personalPages.push(formatPage(page));