import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { User } from '../modules/user/user.entity'; import { Role } from '../modules/roles/roles.entity'; @Injectable() export class RolesGuard implements CanActivate { constructor(private readonly reflector: Reflector) {} canActivate(context: ExecutionContext): boolean { const roles = this.reflector.get('roles', context.getHandler()); if (!roles) { return true; } const request = context.switchToHttp().getRequest(); const user: User = request.user; const hasRole = () => user.roles.some((role: Role) => roles.includes(role.name)); return user && user.roles && hasRole(); } }