Skip to content

관리자의 역할 부여/회수 API 구현#143

Merged
chan99k merged 10 commits intomainfrom
learning-manager-142_impl-role-management
Dec 14, 2025
Merged

관리자의 역할 부여/회수 API 구현#143
chan99k merged 10 commits intomainfrom
learning-manager-142_impl-role-management

Conversation

@chan99k
Copy link
Collaborator

@chan99k chan99k commented Dec 14, 2025

💡 Motivation and Context

관리자가 회원에게 시스템 역할을 부여/해제/조회할 수 있는 API가 필요함에 따라 구현하여 제공합니다.


🔨 Modified

  • @PreAuthorize("hasAnyRole('ADMIN', 'SUPERVISOR')") 적용으로 Tier 2 이상만 접근 가능
  • 역할 부여/해제 전 회원 존재 여부 검증
  • SystemAuthorizationPort를 통한 역할 저장/조회 추상화

구현 구조

│  Controller Layer                                                                                                                  │
│  └── SystemRoleAdminController                                                                                      │
│       @PreAuthorize("hasAnyRole('ADMIN', 'SUPERVISOR')")                                           │
│       ├── POST   /{memberId}/roles     → grantRole                                                              │
│       ├── DELETE /{memberId}/roles/{role} → revokeRole                                                  │
│       └── GET    /{memberId}/roles     → getRoles                  
│  Use Case Layer (core/provides/admin)                                                                             │
│  ├── GrantSystemRole      (interface)                                                                                 │
│  ├── RevokeSystemRole     (interface)                                                                               │
│  └── RetrieveSystemRole   (interface)                                                                               │
│  Service Layer (core/service/admin)                                                                                   │
│  ├── GrantSystemRoleService     @Transactional                                                             │
│  ├── RevokeSystemRoleService    @Transactional                                                           │
│  └── RetrieveSystemRoleService  @Transactional(readOnly=true)                               │
│  Port Layer (core/requires)                                                                                                │
│  └── SystemAuthorizationPort                                                                                          │
│       ├── grantRole(memberId, role)                                                                                   │
│       ├── revokeRole(memberId, role)                                                                                  │
│       └── getRoles(memberId)                                                                                             │

🌟 More


📋 체크리스트

  • 추가/변경에 대한 테스트
  • 코드 컨벤션

🤟🏻 PR로 완료된 이슈

closes #142

- RetrieveSystemRole 인터페이스 추가 및 역할 조회 로직 정의
- GrantSystemRole 인터페이스 추가 및 역할 부여 로직 정의
- RevokeSystemRole 인터페이스 추가 및 역할 회수 로직 정의
- 시스템 역할 부여 서비스(GrantSystemRoleService) 클래스 구현
- 시스템 역할 조회 서비스(RetrieveSystemRoleService) 클래스 구현
- 시스템 역할 회수 서비스(RevokeSystemRoleService) 클래스 구현
- MemberQueryRepository 및 SystemAuthorizationPort 의존성 사용 정의
- GrantSystemRole 및 RevokeSystemRole 메서드에서 `grantedBy` 및 `revokedBy` 매개변수 제거 -> PreAuthorize 사용에 따라서
- 관련 서비스 클래스 호출부 및 구현 로직 수정
- 시스템 역할 부여(POST), 회수(DELETE), 조회(GET) 엔드포인트 구현
- GrantSystemRole, RevokeSystemRole, RetrieveSystemRole 서비스 의존성 주입 및 사용
- `/api/v1/admin/members` 경로에 PreAuthorize 어노테이션 적용
- RetrieveSystemRoleService 클래스에 `@Transactional(readOnly = true)` 속성을 적용하여 읽기 전용 트랜잭션으로 변경
- GrantSystemRoleService, RevokeSystemRoleService, RetrieveSystemRoleService 클래스에 대한 단위 테스트 추가
- SystemRoleAdminController 클래스의 역할 부여, 회수, 조회 API 통합 테스트 추가
- 테스트를 위한 Mock 설정 및 예외 처리 검증 논리 보강
@github-actions
Copy link

github-actions bot commented Dec 14, 2025

테스트 커버리지 리포트

Overall Project 66.65% -0.09% 🍏
Files changed 91.98% 🍏

File Coverage
GrantRoleRequest.java 100% 🍏
SystemRoleAdminController.java 100% 🍏
RevokeSystemRole.java 100% 🍏
GrantSystemRoleService.java 100% 🍏
GrantSystemRole.java 100% 🍏
RetrieveSystemRoleService.java 100% 🍏
RetrieveSystemRole.java 100% 🍏
RevokeSystemRoleService.java 100% 🍏
OpenApiConfig.java 0% -12%
AttendanceSecurity.java 0% 🍏
JpaSystemAuthorizationAdapter.java 0% 🍏

- GrantRoleRequest 클래스를 별도 파일로 분리하여 요청 객체 관리 방식 개선
- 요청 객체 유효성 검증(@Valid) 추가
- 역할 부여 API의 응답 코드를 200에서 201로 변경해 생성 요청에 적합한 상태코드 적용
- GrantRoleRequest 클래스를 별도 파일로 분리하여 요청 객체 관리 방식 개선
- 요청 객체 유효성 검증(@Valid) 추가
- 역할 부여 API의 응답 코드를 200에서 201로 변경해 생성 요청에 적합한 상태코드 적용
- SystemRoleAdminController에 OpenAPI 문서화 어노테이션 추가
  - 각 API에 @operation, @ApiResponses, @parameter 어노테이션 적용
  - 관리자 역할 부여, 회수, 조회 메서드에 상세 설명 및 응답 코드 명시
@chan99k chan99k merged commit 18b288f into main Dec 14, 2025
4 checks passed
@chan99k chan99k deleted the learning-manager-142_impl-role-management branch December 14, 2025 07:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

역할 관리 API 구현

1 participant