SetMetadata + Reflector

@Roles와 RolesGuard 역할

커스텀 데코레이터는 메서드나 컨트롤러에 필요한 역할을 기록하고, 가드는 요청 사용자 정보와 그 기록을 비교합니다.

1

@Roles('admin')

라우트 핸들러에 필요한 역할을 선언형 문장처럼 붙입니다.

2

SetMetadata

`'roles'` 키에 `['admin']` 값을 저장해 런타임에서 읽을 수 있게 합니다.

3

Reflector

RolesGuard가 handler와 class 메타데이터를 함께 조회합니다.

4

user.roles 비교

인증 가드가 채운 `request.user.roles`와 필요한 역할을 대조합니다.

5

허용 또는 거절

일치하면 핸들러가 실행되고, 부족하면 Forbidden 응답으로 끝납니다.

decorator

데코레이터의 책임

`@Roles()`는 인증 상태를 보거나 DB를 조회하지 않습니다. 필요한 역할 목록을 코드 가까이에 남기는 데 집중합니다.

guard

가드의 책임

`canActivate()`에서 메타데이터와 사용자 정보를 조합해 라우트 접근 여부를 결정합니다.