소유자 관리자 진입 권한 보강
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import bcrypt from 'bcrypt'
|
||||
import { z } from 'zod'
|
||||
import { createError, readBody } from 'h3'
|
||||
import { getUserByEmail, touchUserActivity } from '../../repositories/member-repository'
|
||||
import { getUserByEmail, isPrivilegedMemberRole, touchUserActivity } from '../../repositories/member-repository'
|
||||
import { setMemberSession } from '../../utils/member-auth'
|
||||
import { setAdminSession } from '../../utils/admin-auth'
|
||||
import { getClientIp } from '../../utils/request-ip'
|
||||
@@ -16,6 +16,13 @@ const loginSchema = z.object({
|
||||
password: z.string().min(1)
|
||||
})
|
||||
|
||||
/**
|
||||
* 공개 회원이 관리자 진입 권한을 갖는지 확인한다.
|
||||
* @param {{ isAdmin?: boolean, role?: string } | null} user - 회원 정보
|
||||
* @returns {boolean} 관리자 진입 가능 여부
|
||||
*/
|
||||
const canOpenSiteAdmin = (user) => Boolean(user?.isAdmin) || isPrivilegedMemberRole(user?.role)
|
||||
|
||||
/**
|
||||
* 회원 로그인 API
|
||||
* @param {import('h3').H3Event} event - 요청 이벤트
|
||||
@@ -58,7 +65,8 @@ export default defineEventHandler(async (event) => {
|
||||
email: user.email,
|
||||
sessionVersion: user.sessionVersion
|
||||
})
|
||||
if (user.isAdmin) {
|
||||
const isAdminUser = canOpenSiteAdmin(user)
|
||||
if (isAdminUser) {
|
||||
setAdminSession(event, {
|
||||
userId: user.id,
|
||||
email: user.email,
|
||||
@@ -75,6 +83,6 @@ export default defineEventHandler(async (event) => {
|
||||
username: user.username,
|
||||
email: user.email,
|
||||
avatarUrl: user.avatarUrl || '',
|
||||
isAdmin: Boolean(user.isAdmin)
|
||||
isAdmin: isAdminUser
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getUserById } from '../../repositories/member-repository'
|
||||
import { getUserById, isPrivilegedMemberRole } from '../../repositories/member-repository'
|
||||
import { getVerifiedMemberSession, requireMemberSession } from '../../utils/member-auth'
|
||||
|
||||
/**
|
||||
@@ -34,7 +34,7 @@ export default defineEventHandler(async (event) => {
|
||||
username: user.username,
|
||||
email: user.email,
|
||||
avatarUrl: user.avatarUrl || '',
|
||||
isAdmin: Boolean(user.isAdmin),
|
||||
isAdmin: Boolean(user.isAdmin) || isPrivilegedMemberRole(user.role),
|
||||
role: user.role || 'member'
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1,14 +1,10 @@
|
||||
import { createError } from 'h3'
|
||||
import { getPostgresClient } from './postgres-client'
|
||||
import { MEMBER_ROLE, PRIVILEGED_MEMBER_ROLES, isPrivilegedMemberRole } from '../../lib/member-role'
|
||||
|
||||
export const MEMBER_ROLE = {
|
||||
OWNER: 'owner',
|
||||
ADMIN: 'admin',
|
||||
VIP: 'vip',
|
||||
MEMBER: 'member'
|
||||
}
|
||||
export { MEMBER_ROLE, isPrivilegedMemberRole }
|
||||
|
||||
const PRIVILEGED_ROLES = [MEMBER_ROLE.OWNER, MEMBER_ROLE.ADMIN]
|
||||
const PRIVILEGED_ROLES = PRIVILEGED_MEMBER_ROLES
|
||||
const MEMBERSHIP_ACCESS_ROLES = [MEMBER_ROLE.OWNER, MEMBER_ROLE.ADMIN, MEMBER_ROLE.VIP]
|
||||
const BELOW_ADMIN_ROLES = [MEMBER_ROLE.VIP, MEMBER_ROLE.MEMBER]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user