- /api/menu: super admin 은 모든 메뉴, 일반 사용자는 authority_sub_menu 매핑된 메뉴만 노출. 자식이 권한에 있으면 부모 메뉴도 자동 포함 (트리 유지) - 권한 관리 화면에서 메뉴 체크 → 다음 로그인부터 사이드바 즉시 반영 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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 });
|
||||
|
||||
Reference in New Issue
Block a user