fix(admin): 크리에이터 관리자 로그아웃 AGENT 권한을 허용한다 #424

Merged
klaus merged 1 commits from test into main 2026-05-08 10:44:05 +00:00
3 changed files with 45 additions and 1 deletions

View File

@@ -0,0 +1,21 @@
# 크리에이터 관리자 로그아웃 AGENT 권한 허용
## 목표
- `/creator-admin/member/logout` 엔드포인트를 `CREATOR`뿐 아니라 `AGENT` 권한 계정도 사용할 수 있게 한다.
- 로그인 로직이 이미 `CREATOR`, `AGENT`를 허용하는 기존 정책과 로그아웃 권한 조건을 맞춘다.
## 구현 항목
- [x] `CreatorAdminMemberController``logout` 권한 조건에 `AGENT`를 추가한다.
- [x] `logout` 권한 조건이 `CREATOR`, `AGENT`를 모두 포함하는지 테스트로 검증한다.
- [x] 변경 파일 진단과 대상 테스트를 실행한다.
## 검증 계획
- `./gradlew test --tests "kr.co.vividnext.sodalive.creator.admin.member.CreatorAdminMemberControllerTest"`
- `lsp_diagnostics`로 변경 Kotlin 파일 오류 확인
## 검증 기록
- `./gradlew test --tests "kr.co.vividnext.sodalive.creator.admin.member.CreatorAdminMemberControllerTest"`를 먼저 실행해 `hasRole('CREATOR')` 상태에서 실패함을 확인했다.
- `CreatorAdminMemberController.logout``@PreAuthorize``hasAnyRole('CREATOR', 'AGENT')`로 변경했다.
- 동일한 대상 테스트를 `--rerun-tasks`로 재실행해 `BUILD SUCCESSFUL`을 확인했다.
- `lsp_diagnostics`는 Kotlin(`.kt`) LSP 서버가 설정되어 있지 않아 실행할 수 없었다. Gradle 테스트 과정에서 Kotlin 컴파일과 테스트 컴파일은 정상 통과했다.
- 테스트 실행 중 기존 파일 `ImageBlurUtil.kt`의 미사용 파라미터 경고가 표시됐으며, 이번 변경 범위와는 무관해 수정하지 않았다.

View File

@@ -19,7 +19,7 @@ class CreatorAdminMemberController(private val service: CreatorAdminMemberServic
fun login(@RequestBody loginRequest: LoginRequest) = service.login(loginRequest)
@PostMapping("/logout")
@PreAuthorize("hasRole('CREATOR')")
@PreAuthorize("hasAnyRole('CREATOR', 'AGENT')")
fun logout(
@RequestHeader("Authorization") token: String,
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?

View File

@@ -0,0 +1,23 @@
package kr.co.vividnext.sodalive.creator.admin.member
import kr.co.vividnext.sodalive.member.Member
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import org.springframework.security.access.prepost.PreAuthorize
class CreatorAdminMemberControllerTest {
@Test
@DisplayName("로그아웃은 크리에이터와 에이전트 권한을 허용한다")
fun shouldAllowCreatorAndAgentRolesForLogout() {
val logout = CreatorAdminMemberController::class.java.getDeclaredMethod(
"logout",
String::class.java,
Member::class.java
)
val preAuthorize = logout.getAnnotation(PreAuthorize::class.java)
assertEquals("hasAnyRole('CREATOR', 'AGENT')", preAuthorize.value)
}
}