권한, 사용자, 메뉴 등에 대한 기능 업데이트
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { getSession, refreshSession, getSessionIdFromCookie, deleteSessionCookie } from '../../utils/session'
|
||||
import { getDbSession, refreshSession, getSessionIdFromCookie, deleteSessionCookie, getUserRoles } from '../../utils/session'
|
||||
import { queryOne, execute, query } from '../../utils/db'
|
||||
|
||||
/**
|
||||
* 현재 로그인 사용자 정보
|
||||
* 현재 로그인 사용자 정보 (권한 포함)
|
||||
* GET /api/auth/current-user
|
||||
*/
|
||||
export default defineEventHandler(async (event) => {
|
||||
@@ -43,12 +44,16 @@ export default defineEventHandler(async (event) => {
|
||||
`, [session.loginHistoryId])
|
||||
}
|
||||
|
||||
// 사용자 권한 조회
|
||||
const roles = await getUserRoles(employee.employee_id)
|
||||
|
||||
return {
|
||||
user: {
|
||||
employeeId: employee.employee_id,
|
||||
employeeName: employee.employee_name,
|
||||
employeeEmail: employee.employee_email,
|
||||
employeePosition: employee.employee_position
|
||||
employeePosition: employee.employee_position,
|
||||
roles // 권한 코드 배열 추가
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -28,7 +28,11 @@ export default defineEventHandler(async (event) => {
|
||||
employee_position,
|
||||
company,
|
||||
join_date,
|
||||
is_active
|
||||
is_active,
|
||||
created_at,
|
||||
created_ip,
|
||||
updated_at,
|
||||
updated_ip
|
||||
FROM wr_employee_info
|
||||
WHERE employee_id = $1
|
||||
`, [session.employeeId])
|
||||
@@ -46,7 +50,11 @@ export default defineEventHandler(async (event) => {
|
||||
employeePosition: employee.employee_position,
|
||||
company: employee.company,
|
||||
joinDate: employee.join_date,
|
||||
isActive: employee.is_active
|
||||
isActive: employee.is_active,
|
||||
createdAt: employee.created_at,
|
||||
createdIp: employee.created_ip,
|
||||
updatedAt: employee.updated_at,
|
||||
updatedIp: employee.updated_ip
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
80
backend/api/auth/menu.get.ts
Normal file
80
backend/api/auth/menu.get.ts
Normal file
@@ -0,0 +1,80 @@
|
||||
import { query } from '../../utils/db'
|
||||
import { getDbSession, getSessionIdFromCookie } from '../../utils/session'
|
||||
|
||||
/**
|
||||
* 현재 사용자 접근 가능 메뉴 조회
|
||||
* GET /api/auth/menu
|
||||
*/
|
||||
export default defineEventHandler(async (event) => {
|
||||
const sessionId = getSessionIdFromCookie(event)
|
||||
|
||||
if (!sessionId) {
|
||||
throw createError({ statusCode: 401, message: '로그인이 필요합니다.' })
|
||||
}
|
||||
|
||||
const session = await getDbSession(sessionId)
|
||||
|
||||
if (!session) {
|
||||
throw createError({ statusCode: 401, message: '세션이 만료되었습니다.' })
|
||||
}
|
||||
|
||||
// 사용자의 권한 목록 조회
|
||||
const userRoles = await query<any>(`
|
||||
SELECT r.role_id, r.role_code
|
||||
FROM wr_employee_role er
|
||||
JOIN wr_role r ON er.role_id = r.role_id
|
||||
WHERE er.employee_id = $1
|
||||
`, [session.employeeId])
|
||||
|
||||
const roleIds = userRoles.map(r => r.role_id)
|
||||
|
||||
if (roleIds.length === 0) {
|
||||
return { menus: [] }
|
||||
}
|
||||
|
||||
// 접근 가능한 메뉴 조회
|
||||
const menus = await query<any>(`
|
||||
SELECT DISTINCT
|
||||
m.menu_id,
|
||||
m.menu_code,
|
||||
m.menu_name,
|
||||
m.menu_path,
|
||||
m.menu_icon,
|
||||
m.parent_menu_id,
|
||||
m.sort_order
|
||||
FROM wr_menu m
|
||||
JOIN wr_menu_role mr ON m.menu_id = mr.menu_id
|
||||
WHERE mr.role_id = ANY($1)
|
||||
AND m.is_active = true
|
||||
ORDER BY m.parent_menu_id NULLS FIRST, m.sort_order
|
||||
`, [roleIds])
|
||||
|
||||
// 계층 구조로 변환
|
||||
const menuMap = new Map<number, any>()
|
||||
const rootMenus: any[] = []
|
||||
|
||||
for (const m of menus) {
|
||||
const menuItem = {
|
||||
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,
|
||||
sortOrder: m.sort_order,
|
||||
children: []
|
||||
}
|
||||
menuMap.set(m.menu_id, menuItem)
|
||||
}
|
||||
|
||||
for (const m of menus) {
|
||||
const menuItem = menuMap.get(m.menu_id)
|
||||
if (m.parent_menu_id && menuMap.has(m.parent_menu_id)) {
|
||||
menuMap.get(m.parent_menu_id).children.push(menuItem)
|
||||
} else if (!m.parent_menu_id) {
|
||||
rootMenus.push(menuItem)
|
||||
}
|
||||
}
|
||||
|
||||
return { menus: rootMenus }
|
||||
})
|
||||
Reference in New Issue
Block a user