faloker/purify

View on GitHub
api/src/common/guards/roles.guard.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
92%
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { Role } from 'src/users/interfaces/user.interface';

@Injectable()
export class RolesGuard implements CanActivate {
  constructor(private readonly reflector: Reflector) {}

  canActivate(context: ExecutionContext): boolean {
    const roles = this.reflector.get<string[]>('roles', context.getHandler());
    if (!roles) {
      return true;
    }

    const req = context.switchToHttp().getRequest();
    if (!req.user) {
      return false;
    } else if (req.user.role === Role.OWNER) {
      return true;
    }

    return roles.includes(req.user.role);
  }
}