metadata
@Roles와 RolesGuard 역할
@Roles는 required roles를 메타데이터로 저장한다. RolesGuard는 요청마다 그 값을 읽어 현재 사용자 역할과 맞는지 판정한다.
메타데이터 흐름: write once, read on request선언된 정책이 실행 시점의 사용자와 만난다.
메타데이터가 권한 판단으로 이어지는 경로
1SetMetadata
@Roles("admin")이 roles 키에 값을 저장한다.
2Reflector
RolesGuard가 클래스와 핸들러의 값을 함께 읽는다.
3Request user
AuthGuard가 만든 user.roles를 가져온다.
4Decision
필요 역할이 없으면 통과, 있으면 포함 여부를 확인한다.
권한 판단 결과
| 상황 | 판정 | 결과 |
|---|---|---|
| requiredRoles 없음 | 공개 또는 별도 정책 | 통과 |
| 사용자 역할에 admin 포함 | 요구 역할 충족 | 핸들러 실행 |
| 역할 불일치 | 요구 역할 미충족 | 403 응답 |