import { Injectable, CanActivate, ExecutionContext } from "@nestjs/common"; import { Reflector } from "@nestjs/core"; @Injectable() export class RolesGuard implements CanActivate { constructor(private readonly reflector: Reflector) {} canActivate(context: ExecutionContext): boolean { // get the roles required const roles = this.reflector.getAllAndOverride("role", [ context.getHandler(), context.getClass(), ]); if (!roles) { return false; } const request = context.switchToHttp().getRequest(); const userRoles = request.user?.role?.split(","); return this.validateRoles(roles, userRoles); } validateRoles(roles: string[], userRoles: string[]) { return roles.some((role) => userRoles.includes(role)); } }