파파고는 "모든것을 종합해보면" 이라고 번역된다. 음.. 그냥 여태까지 배운 것들을 모두 한 파일에 넣어보는? 으로 난 해석된다.
우리의 RolesGuard
에 종합해보자. 처리중인 라우트에 필요한 실제 role과 현재 user에 할당된 role을 비교한 후 value를 리턴할껀데,
이 때 Reflector
라는 헬퍼클래스를 사용하자.
role.guard.ts
에 아래 코드를 넣자.
import { Injectable, CanActivate, ExecutionContext }
from '@nestjs/common';
import { Reflector } from '@nestjs/core';
@Injectable()
export class RolesGuard implements CanActivate {
constructor(private reflector: Reflector) {}
canActivate(context: ExecutionContext): boolean {
const roles =
this.reflector.get<string[]>('roles', context.getHandler());
if (!roles) {
return true;
}
const request = context.switchToHttp().getRequest();
const user = request.user;
return matchRoles(roles, user.roles);
}
}
마지막줄에 있는 matchRoles()
를 사용하면 사용자의 요구에 맞게 간단하거나 세부적으로 설정할 수 있다. request에 맞게 response를 잘 해주는 것이 위 예제의 포인트라고 볼 수 있다.
이렇게 Guard에 대해 한번 봤는데, 역시 공부는 한번만 하는 것이 아닌 것 같다..
나중에 NestJS를 어느정도 이해했다면, 다시 공부를 시작할 것 같다..