api/src/common/guards/roles.guard.ts
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);
}
}