import { Injectable, CanActivate, ExecutionContext, ForbiddenException, } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { ROLES_KEY } from '../decorators/roles.decorator'; @Injectable() export class RolesGuard implements CanActivate { constructor(private reflector: Reflector) {} canActivate(context: ExecutionContext): boolean { const requiredRoles = this.reflector.get( ROLES_KEY, context.getHandler(), ); if (!requiredRoles) return true; // Si no hay roles definidos, permitir acceso. const request = context.switchToHttp().getRequest(); const user = request.user; // Usuario ya validado en JwtValidationGuard if (!user) { throw new ForbiddenException('Usuario no autenticado'); } // Obtener el tipo de usuario const tipo_usuario = user.tipoUser.tipo; if (!tipo_usuario) { throw new ForbiddenException('No se pudo determinar el tipo de usuario'); } // Validar si el usuario tiene uno de los roles requeridos const hasRole = requiredRoles.includes(tipo_usuario); if (!hasRole) { throw new ForbiddenException( 'No tienes permisos para acceder a este recurso', ); } return true; } }