Skip to content

[FEATURE] SecurityConfig 역할별 API 엔드포인트 접근 권한 설정#43

Merged
fervovita merged 1 commit into
devfrom
feat/#41-role-based-authorization
Jun 21, 2026
Merged

[FEATURE] SecurityConfig 역할별 API 엔드포인트 접근 권한 설정#43
fervovita merged 1 commit into
devfrom
feat/#41-role-based-authorization

Conversation

@fervovita

@fervovita fervovita commented Jun 20, 2026

Copy link
Copy Markdown
Collaborator

🚀 Related issue

Closes #41

#️⃣ Summary

  • JWT Access Token에 사용자 역할을 추가하고, SecurityConfig를 통해 강사/디자이너 역할별로 API 엔드포인트 접근 권한을 제한

🔧 Changes

  • ROLE_INSTRUCTOR, ROLE_DESIGNER 기반 역할 부여
  • /api/v1/instructors/**, api/v1/designers/** 접근 제어 추가

📸 Test Evidence

image

💬 Reviewer Notes

  • 리뷰어나 같이 작업하는 사람들에게 남길 코멘트

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 사용자 역할별 API 접근 제어 강화
  • Bug Fixes

    • 토큰 발급 시 사용자 역할 정보 누락 문제 해결
  • Refactor

    • 토큰 발급 로직 개선으로 인증 안정성 향상
    • 토큰 페이로드 처리 최적화

@fervovita fervovita self-assigned this Jun 20, 2026
@fervovita fervovita requested a review from Jong0128 as a code owner June 20, 2026 07:57
@coderabbitai

coderabbitai Bot commented Jun 20, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro Plus

Run ID: 90aac88c-fe83-442f-b36c-25ed0875ed86

📥 Commits

Reviewing files that changed from the base of the PR and between 49c9b52 and 7609c07.

📒 Files selected for processing (8)
  • src/main/java/ditda/backend/domain/auth/service/AuthService.java
  • src/main/java/ditda/backend/domain/auth/service/DesignerAuthService.java
  • src/main/java/ditda/backend/domain/auth/service/InstructorAuthService.java
  • src/main/java/ditda/backend/domain/user/service/UserService.java
  • src/main/java/ditda/backend/global/config/SecurityConfig.java
  • src/main/java/ditda/backend/global/jwt/JwtTokenProvider.java
  • src/main/java/ditda/backend/global/jwt/dto/AccessTokenPayload.java
  • src/main/java/ditda/backend/global/jwt/filter/JwtTokenFilter.java

📝 Walkthrough

Walkthrough

Access 토큰에 UserRole 클레임을 추가하고, AccessTokenPayload DTO를 도입합니다. JwtTokenFilter가 동적 역할 기반 권한 부여로 전환되고, AuthService.issueTokens 시그니처가 User 엔터티 기반으로 변경되며, SecurityConfig에 강사/디자이너 역할별 엔드포인트 접근 제어 규칙이 추가됩니다.

Changes

역할 기반 JWT 및 엔드포인트 접근 제어

Layer / File(s) Summary
AccessTokenPayload DTO 및 JwtTokenProvider role 클레임 확장
global/jwt/dto/AccessTokenPayload.java, global/jwt/JwtTokenProvider.java
AccessTokenPayload(userId, role) 레코드가 신규 추가됩니다. generateAccessToken(userId, role) 시그니처로 변경되어 role 클레임을 포함하고, getAccessTokenPayload가 공개 API로 추가됩니다. validateAccessToken, validateRefreshToken, getSessionIdprivate으로 변경되고, getRole 헬퍼가 추가되어 role 클레임 파싱/검증을 담당합니다.
JwtTokenFilter 동적 역할 기반 인증 처리
global/jwt/filter/JwtTokenFilter.java
Claims 기반 고정 ROLE_USER 부여 방식이 getAccessTokenPayload 호출로 대체되고, payload.role()에서 동적으로 ROLE_{role} 권한을 생성해 SecurityContext에 설정합니다.
AuthService issueTokens 시그니처 변경 및 UserService.findById 추가
domain/user/service/UserService.java, domain/auth/service/AuthService.java
UserService.findById가 신규 추가되어 미존재 시 USER_NOT_FOUND 예외를 발생시킵니다. issueTokens 입력이 Long userId에서 User 엔터티로 변경되어 user.getRole()을 직접 활용하며, reissue 경로에서 userService.findById로 역할을 조회해 토큰에 반영합니다.
호출 지점 업데이트 및 SecurityConfig 역할별 접근 제어
domain/auth/service/DesignerAuthService.java, domain/auth/service/InstructorAuthService.java, global/config/SecurityConfig.java
DesignerAuthServiceInstructorAuthServiceissueTokens 호출이 user 엔터티 전달로 변경됩니다. SecurityConfig/api/v1/instructors/**INSTRUCTOR, /api/v1/designers/**DESIGNER 역할만 허용하는 규칙이 추가됩니다.

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant JwtTokenFilter
  participant JwtTokenProvider
  participant SecurityContext

  rect rgba(100, 150, 255, 0.5)
    Note over Client,SecurityContext: 인증 처리 흐름 (변경 후)
    Client->>JwtTokenFilter: HTTP 요청 (Authorization: Bearer token)
    JwtTokenFilter->>JwtTokenProvider: getAccessTokenPayload(token)
    JwtTokenProvider-->>JwtTokenFilter: AccessTokenPayload(userId, role)
    JwtTokenFilter->>SecurityContext: UsernamePasswordAuthenticationToken(userId, ROLE_{role})
  end

  rect rgba(100, 200, 150, 0.5)
    Note over Client,SecurityContext: 엔드포인트 접근 제어
    SecurityContext-->>Client: /api/v1/instructors/** → INSTRUCTOR만 허용
    SecurityContext-->>Client: /api/v1/designers/** → DESIGNER만 허용
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25분

Possibly related PRs

  • Ditda-Official/Ditda-Backend#4: 기존 JwtTokenProvider.generateAccessTokenJwtTokenFilter 구현을 role 클레임/AccessTokenPayload 기반으로 확장하는 직접적인 코드 레벨 수정입니다.
  • Ditda-Official/Ditda-Backend#15: JwtTokenProvider의 세션 ID 클레임 도입(getSessionId(Claims)) 구현을 이어받아, 동일한 파일에서 가시성 변경 및 role 클레임 확장을 수행합니다.
  • Ditda-Official/Ditda-Backend#21: AuthService.issueTokens 반환/호출 계약 변경을 공유하며, 동일한 토큰 발급 흐름에서 맞물리는 변경입니다.

Suggested reviewers

  • Jong0128
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning PR에는 범위 밖의 변경사항이 포함되어 있습니다. JWT Access Token에 역할 클레임 추가, UserService에 findById 메서드 추가, JwtTokenFilter 개선 등은 Issue #41의 주요 요구사항과 직접적인 관련이 없습니다. PR 범위를 명확히 하거나, 추가 변경사항들을 별도 이슈로 분리하여 관리하는 것을 권장합니다.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 SecurityConfig에 역할별 API 엔드포인트 접근 권한을 설정하는 기능을 명확하게 설명하며, 변경사항의 주요 목표를 잘 반영하고 있습니다.
Linked Issues check ✅ Passed PR은 Issue #41의 요구사항을 완전히 충족합니다: ROLE_INSTRUCTOR와 ROLE_DESIGNER 역할 부여, /api/v1/instructors/와 /api/v1/designers/ 접근 제어 구현이 모두 포함되어 있습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/#41-role-based-authorization

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@Jong0128 Jong0128 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!
바로 merge 하셔도 될꺼같습니다!
늦어서 죄송합니다 😢

@fervovita fervovita merged commit 5c1d48e into dev Jun 21, 2026
2 checks passed
@fervovita fervovita deleted the feat/#41-role-based-authorization branch June 21, 2026 15:09
@fervovita fervovita mentioned this pull request Jun 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE] SecurityConfig 역할별 API 엔드포인트 접근 권한 설정

2 participants