Guard decision

요청 하나는 사용자 역할, 라우트 역할, 비교 규칙으로 판정된다

RBAC가 헷갈릴 때는 코드 위치보다 판정 데이터를 먼저 본다. 요청이 통과하려면 JWT가 만든 역할과 라우트 메타데이터가 같은 모델을 바라봐야 한다.

1

JWT 검증

토큰이 유효하면 req.user.roles가 준비된다.

2

역할 읽기

Reflector가 핸들러와 클래스의 @Roles() 값을 가져온다.

3

교집합 확인

요구 역할이 없거나 하나라도 겹치면 통과한다.

4

응답 결정

일치하면 핸들러 실행, 불일치하면 403으로 끝난다.

상황 판정 이유
requiredRoles 없음 통과 공개 라우트이거나 인증만 필요한 라우트
admin 요구, admin 보유 통과 사용자 역할과 요구 역할이 겹침
admin 요구, user만 보유 거부 교집합이 없어 권한 부족