decorator plus guard
데코레이터와 가드 권한 검사
데코레이터는 메타데이터를 선언하고, 가드는 실행 시점에 그 메타데이터와 사용자 정보를 비교한다. 선언과 판단을 분리하는 구조다.
책임 분리: @Roles는 기록, RolesGuard는 판단컨트롤러에는 정책 의도만 남긴다.
RBAC 요청 처리 순서
1@Roles
핸들러나 클래스에 필요한 역할 메타데이터를 붙인다.
2AuthGuard
토큰을 확인하고 req.user를 준비한다.
3RolesGuard
Reflector로 requiredRoles를 읽는다.
4Compare
user.roles와 requiredRoles를 비교한다.
5Handler
통과한 요청만 컨트롤러 메서드로 들어간다.
실수 방지 포인트
01인증 먼저
역할 비교 전에 사용자가 누구인지 확정되어야 한다.
02메타데이터는 선언
@Roles 자체는 접근을 막지 않는다.
03가드는 실행 판단
true면 통과, false나 예외면 핸들러가 실행되지 않는다.