기능구현중
This commit is contained in:
44
server/api/admin/menu/[id]/toggle-role.post.ts
Normal file
44
server/api/admin/menu/[id]/toggle-role.post.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import { queryOne, execute } from '../../../../utils/db'
|
||||
import { requireAdmin } from '../../../../utils/session'
|
||||
|
||||
/**
|
||||
* 메뉴 권한 토글
|
||||
* POST /api/admin/menu/[id]/toggle-role
|
||||
*/
|
||||
export default defineEventHandler(async (event) => {
|
||||
await requireAdmin(event)
|
||||
|
||||
const menuId = getRouterParam(event, 'id')
|
||||
const body = await readBody(event)
|
||||
const { roleId, enabled } = body
|
||||
|
||||
if (!roleId) {
|
||||
throw createError({ statusCode: 400, message: '권한 ID가 필요합니다.' })
|
||||
}
|
||||
|
||||
// 메뉴 존재 확인
|
||||
const menu = await queryOne<any>(`
|
||||
SELECT menu_id FROM wr_menu WHERE menu_id = $1
|
||||
`, [menuId])
|
||||
|
||||
if (!menu) {
|
||||
throw createError({ statusCode: 404, message: '메뉴를 찾을 수 없습니다.' })
|
||||
}
|
||||
|
||||
if (enabled) {
|
||||
// 권한 추가
|
||||
await execute(`
|
||||
INSERT INTO wr_menu_role (menu_id, role_id)
|
||||
VALUES ($1, $2)
|
||||
ON CONFLICT (menu_id, role_id) DO NOTHING
|
||||
`, [menuId, roleId])
|
||||
} else {
|
||||
// 권한 제거
|
||||
await execute(`
|
||||
DELETE FROM wr_menu_role
|
||||
WHERE menu_id = $1 AND role_id = $2
|
||||
`, [menuId, roleId])
|
||||
}
|
||||
|
||||
return { success: true }
|
||||
})
|
||||
73
server/api/admin/menu/list.get.ts
Normal file
73
server/api/admin/menu/list.get.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import { query } from '../../../utils/db'
|
||||
import { requireAdmin } from '../../../utils/session'
|
||||
|
||||
/**
|
||||
* 메뉴 목록 조회 (권한 포함)
|
||||
* GET /api/admin/menu/list
|
||||
*/
|
||||
export default defineEventHandler(async (event) => {
|
||||
await requireAdmin(event)
|
||||
|
||||
// 메뉴 목록 조회
|
||||
const menus = await query<any>(`
|
||||
SELECT
|
||||
m.menu_id,
|
||||
m.menu_code,
|
||||
m.menu_name,
|
||||
m.menu_path,
|
||||
m.menu_icon,
|
||||
m.parent_menu_id,
|
||||
m.sort_order,
|
||||
m.is_active,
|
||||
m.created_at,
|
||||
m.updated_at,
|
||||
pm.menu_name AS parent_menu_name
|
||||
FROM wr_menu m
|
||||
LEFT JOIN wr_menu pm ON m.parent_menu_id = pm.menu_id
|
||||
ORDER BY m.parent_menu_id NULLS FIRST, m.sort_order
|
||||
`)
|
||||
|
||||
// 권한 목록 조회
|
||||
const roles = await query<any>(`
|
||||
SELECT role_id, role_code, role_name
|
||||
FROM wr_role
|
||||
ORDER BY role_id
|
||||
`)
|
||||
|
||||
// 메뉴-권한 매핑 조회
|
||||
const menuRoles = await query<any>(`
|
||||
SELECT menu_id, role_id
|
||||
FROM wr_menu_role
|
||||
`)
|
||||
|
||||
// 메뉴별 권한 매핑 정리
|
||||
const menuRoleMap: Record<number, number[]> = {}
|
||||
for (const mr of menuRoles) {
|
||||
if (!menuRoleMap[mr.menu_id]) {
|
||||
menuRoleMap[mr.menu_id] = []
|
||||
}
|
||||
menuRoleMap[mr.menu_id].push(mr.role_id)
|
||||
}
|
||||
|
||||
return {
|
||||
menus: menus.map(m => ({
|
||||
menuId: m.menu_id,
|
||||
menuCode: m.menu_code,
|
||||
menuName: m.menu_name,
|
||||
menuPath: m.menu_path,
|
||||
menuIcon: m.menu_icon,
|
||||
parentMenuId: m.parent_menu_id,
|
||||
parentMenuName: m.parent_menu_name,
|
||||
sortOrder: m.sort_order,
|
||||
isActive: m.is_active,
|
||||
createdAt: m.created_at,
|
||||
updatedAt: m.updated_at,
|
||||
roleIds: menuRoleMap[m.menu_id] || []
|
||||
})),
|
||||
roles: roles.map((r: any) => ({
|
||||
roleId: r.role_id,
|
||||
roleCode: r.role_code,
|
||||
roleName: r.role_name
|
||||
}))
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user