[TIL] NestJS 공부 12일차

정인교·2021년 6월 15일
0

TIL(Today I Learned)

목록 보기
23/67
post-thumbnail

Putting it all together

파파고는 "모든것을 종합해보면" 이라고 번역된다. 음.. 그냥 여태까지 배운 것들을 모두 한 파일에 넣어보는? 으로 난 해석된다.

우리의 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를 어느정도 이해했다면, 다시 공부를 시작할 것 같다..

profile
백엔드 개발자 정인교입니다!

0개의 댓글

관련 채용 정보