JWT 검증
토큰이 유효하면 req.user.roles가 준비된다.
RBAC가 헷갈릴 때는 코드 위치보다 판정 데이터를 먼저 본다. 요청이 통과하려면 JWT가 만든 역할과 라우트 메타데이터가 같은 모델을 바라봐야 한다.
토큰이 유효하면 req.user.roles가 준비된다.
Reflector가 핸들러와 클래스의 @Roles() 값을 가져온다.
요구 역할이 없거나 하나라도 겹치면 통과한다.
일치하면 핸들러 실행, 불일치하면 403으로 끝난다.
| 상황 | 판정 | 이유 |
|---|---|---|
| requiredRoles 없음 | 통과 | 공개 라우트이거나 인증만 필요한 라우트 |
| admin 요구, admin 보유 | 통과 | 사용자 역할과 요구 역할이 겹침 |
| admin 요구, user만 보유 | 거부 | 교집합이 없어 권한 부족 |