RBAC Guard

AuthGuard가 사용자를 만들고 RolesGuard가 역할을 판정한다

RBAC는 로그인 여부 확인이 아니다. JWT 인증으로 만들어진 사용자 역할과 라우트의 @Roles() 메타데이터를 비교하는 별도 인가 단계다.

01 AuthGuard JWT 검증 토큰을 확인해 req.user.roles를 만든다.
02 Metadata @Roles 읽기 핸들러 역할이 클래스 기본 역할보다 우선한다.
03 Compare 역할 배열 비교 필요 역할 중 하나라도 있으면 통과한다.
04 Decision allow 또는 403 인증 성공 사용자도 역할 부족이면 차단한다.
출처 판단 기준
user.roles JwtStrategy.validate 사용자가 가진 역할 목록
requiredRoles @Roles metadata 라우트가 요구하는 역할
result RolesGuard.canActivate 일치하면 handler 실행, 아니면 403

핵심: AuthGuard와 RolesGuard를 분리해야 “누구인가”와 “무엇을 할 수 있는가”를 다르게 테스트할 수 있다.