기존 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:
@@ -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 });
|
||||||
|
|||||||
Reference in New Issue
Block a user