metadata

@Roles와 RolesGuard 역할

@Roles는 required roles를 메타데이터로 저장한다. RolesGuard는 요청마다 그 값을 읽어 현재 사용자 역할과 맞는지 판정한다.

메타데이터 흐름: write once, read on request선언된 정책이 실행 시점의 사용자와 만난다.

메타데이터가 권한 판단으로 이어지는 경로

1SetMetadata

@Roles("admin")이 roles 키에 값을 저장한다.

2Reflector

RolesGuard가 클래스와 핸들러의 값을 함께 읽는다.

3Request user

AuthGuard가 만든 user.roles를 가져온다.

4Decision

필요 역할이 없으면 통과, 있으면 포함 여부를 확인한다.

권한 판단 결과

상황판정결과
requiredRoles 없음공개 또는 별도 정책통과
사용자 역할에 admin 포함요구 역할 충족핸들러 실행
역할 불일치요구 역할 미충족403 응답