feat(menu): 사이드 메뉴 API 에 권한그룹 필터 적용
Deploy momo-erp / deploy (push) Failing after 36s

- /api/menu: super admin 은 모든 메뉴, 일반 사용자는 authority_sub_menu 매핑된
  메뉴만 노출. 자식이 권한에 있으면 부모 메뉴도 자동 포함 (트리 유지)
- 권한 관리 화면에서 메뉴 체크 → 다음 로그인부터 사이드바 즉시 반영

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
chpark
2026-05-08 14:54:15 +09:00
parent a3ab0d7629
commit 5b457b8f0d
+23 -2
View File
@@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from "next/server";
import { queryRows } from "@/lib/db";
import { getSession } from "@/lib/session";
// main/getmenu.do 대응 - 사이드 메뉴 조회
// main/getmenu.do 대응 사이드 메뉴 조회 (권한 그룹 필터 적용)
export async function POST(request: NextRequest) {
const user = await getSession();
if (!user) {
@@ -11,7 +11,9 @@ export async function POST(request: NextRequest) {
const body = await request.json();
const menuObjId = body.MENUOBJID || "";
const isAdmin = !!user.isAdmin;
// super admin = 모든 메뉴, 일반 사용자 = 권한 그룹 매핑된 메뉴만 (자식이 있으면 부모도 자동 노출)
const rows = await queryRows(
`SELECT MI.OBJID::text AS "objid",
MI.MENU_NAME_KOR AS "menuNameKor",
@@ -24,8 +26,27 @@ export async function POST(request: NextRequest) {
WHERE COALESCE(MI.STATUS, '') = 'active'
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'))
AND (
$2::boolean = true
OR MI.OBJID IN (
SELECT ASM.menu_objid
FROM authority_sub_user ASU
JOIN authority_sub_menu ASM ON ASM.master_objid = ASU.master_objid
WHERE ASU.user_id = $3::text
)
OR EXISTS (
SELECT 1 FROM menu_info CH
WHERE CH.parent_obj_id = MI.objid
AND CH.objid IN (
SELECT ASM.menu_objid
FROM authority_sub_user ASU
JOIN authority_sub_menu ASM ON ASM.master_objid = ASU.master_objid
WHERE ASU.user_id = $3::text
)
)
)
ORDER BY MI.SEQ`,
[menuObjId]
[menuObjId, isAdmin, user.userId]
);
return NextResponse.json({ RESULT: rows });