fix(menu): isAdmin 백도어 제거 — 권한 그룹 매핑대로 동적 노출
Deploy momo-erp / deploy (push) Failing after 1m32s

기존 SQL 은 $isAdmin=true 면 모든 메뉴 통과 → 권한 매핑이 의미 없었음.
사용자 요청: "로그인한 사용자 권한 그룹에 따른 메뉴가 동적으로 나오도록"

- /api/menu: isAdmin 분기 제거, authority_sub_user JOIN authority_sub_menu
  매핑만 사용. 자식이 권한에 있으면 부모도 자동 노출(트리 유지) 로직은 유지
- 운영 DB: 관리자그룹에 active 메뉴 36개 일괄 매핑 (재고 이력 9000304 포함).
  사용자 관리 화면에서 권한 그룹 멤버 / 메뉴 매핑을 직접 조정해 사용자별
  사이드바를 동적으로 제어

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
chpark
2026-05-12 00:26:22 +09:00
parent 10e8dad841
commit 52db6eff53
+6 -7
View File
@@ -11,9 +11,9 @@ export async function POST(request: NextRequest) {
const body = await request.json(); const body = await request.json();
const menuObjId = body.MENUOBJID || ""; const menuObjId = body.MENUOBJID || "";
const isAdmin = !!user.isAdmin;
// super admin = 모든 메뉴, 일반 사용자 = 권한 그룹 매핑된 메뉴만 (자식이 있으면 부모 자동 노출) // 로그인한 사용자 권한 그룹 매핑된 메뉴만 노출 (자식이 권한에 있으면 부모 자동 표시).
// isAdmin 같은 백도어는 두지 않음 — 모든 사용자는 권한 그룹 매핑대로 동적으로 메뉴를 받는다.
const rows = await queryRows( const rows = await queryRows(
`SELECT MI.OBJID::text AS "objid", `SELECT MI.OBJID::text AS "objid",
MI.MENU_NAME_KOR AS "menuNameKor", MI.MENU_NAME_KOR AS "menuNameKor",
@@ -27,12 +27,11 @@ export async function POST(request: NextRequest) {
AND (MI.PARENT_OBJ_ID = $1::numeric AND (MI.PARENT_OBJ_ID = $1::numeric
OR MI.PARENT_OBJ_ID IN (SELECT OBJID FROM MENU_INFO WHERE PARENT_OBJ_ID = $1::numeric AND COALESCE(STATUS, '') = 'active')) OR MI.PARENT_OBJ_ID IN (SELECT OBJID FROM MENU_INFO WHERE PARENT_OBJ_ID = $1::numeric AND COALESCE(STATUS, '') = 'active'))
AND ( AND (
$2::boolean = true MI.OBJID IN (
OR MI.OBJID IN (
SELECT ASM.menu_objid SELECT ASM.menu_objid
FROM authority_sub_user ASU FROM authority_sub_user ASU
JOIN authority_sub_menu ASM ON ASM.master_objid = ASU.master_objid JOIN authority_sub_menu ASM ON ASM.master_objid = ASU.master_objid
WHERE ASU.user_id = $3::text WHERE ASU.user_id = $2::text
) )
OR EXISTS ( OR EXISTS (
SELECT 1 FROM menu_info CH SELECT 1 FROM menu_info CH
@@ -41,12 +40,12 @@ export async function POST(request: NextRequest) {
SELECT ASM.menu_objid SELECT ASM.menu_objid
FROM authority_sub_user ASU FROM authority_sub_user ASU
JOIN authority_sub_menu ASM ON ASM.master_objid = ASU.master_objid JOIN authority_sub_menu ASM ON ASM.master_objid = ASU.master_objid
WHERE ASU.user_id = $3::text WHERE ASU.user_id = $2::text
) )
) )
) )
ORDER BY MI.SEQ`, ORDER BY MI.SEQ`,
[menuObjId, isAdmin, user.userId] [menuObjId, user.userId]
); );
return NextResponse.json({ RESULT: rows }); return NextResponse.json({ RESULT: rows });