권한, 사용자, 메뉴 등에 대한 기능 업데이트
This commit is contained in:
@@ -196,3 +196,55 @@ export async function requireAuth(event: any): Promise<number> {
|
||||
}
|
||||
return userId
|
||||
}
|
||||
|
||||
/**
|
||||
* 사용자 권한 조회
|
||||
*/
|
||||
export async function getUserRoles(employeeId: number): Promise<string[]> {
|
||||
const rows = await query<any>(`
|
||||
SELECT r.role_code
|
||||
FROM wr_employee_role er
|
||||
JOIN wr_role r ON er.role_id = r.role_id
|
||||
WHERE er.employee_id = $1 AND r.is_active = true
|
||||
`, [employeeId])
|
||||
|
||||
return rows.map(r => r.role_code)
|
||||
}
|
||||
|
||||
/**
|
||||
* 특정 권한 보유 여부 확인
|
||||
*/
|
||||
export async function hasRole(employeeId: number, roleCode: string): Promise<boolean> {
|
||||
const roles = await getUserRoles(employeeId)
|
||||
return roles.includes(roleCode)
|
||||
}
|
||||
|
||||
/**
|
||||
* 관리자 권한 필수 API용 - ROLE_ADMIN 없으면 에러 throw
|
||||
*/
|
||||
export async function requireAdmin(event: any): Promise<number> {
|
||||
const userId = await requireAuth(event)
|
||||
|
||||
const isAdmin = await hasRole(userId, 'ROLE_ADMIN')
|
||||
if (!isAdmin) {
|
||||
throw createError({ statusCode: 403, message: '관리자 권한이 필요합니다.' })
|
||||
}
|
||||
|
||||
return userId
|
||||
}
|
||||
|
||||
/**
|
||||
* 매니저 이상 권한 필수 API용 - ROLE_MANAGER 또는 ROLE_ADMIN 없으면 에러 throw
|
||||
*/
|
||||
export async function requireManager(event: any): Promise<number> {
|
||||
const userId = await requireAuth(event)
|
||||
|
||||
const roles = await getUserRoles(userId)
|
||||
const hasManagerRole = roles.includes('ROLE_MANAGER') || roles.includes('ROLE_ADMIN')
|
||||
|
||||
if (!hasManagerRole) {
|
||||
throw createError({ statusCode: 403, message: '매니저 이상 권한이 필요합니다.' })
|
||||
}
|
||||
|
||||
return userId
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user