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 { const roles = this.reflector.getAllAndOverride("role", [ context.getHandler(), context.getClass(), ]); if (!roles?.length) { return false; } const request = context.switchToHttp().getRequest(); const role = request.user?.role; if (!role) { return false; } const userRoles = String(role).split(","); return this.validateRoles(roles, userRoles); } validateRoles(roles: string[], userRoles: string[]) { return roles.some((role) => userRoles.includes(role)); } }