Files
api_directorio/src/permissions/roles.guard.ts
T
2024-06-25 15:54:58 -06:00

34 lines
1.0 KiB
TypeScript

// roles.guard.ts
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { Role } from './role.enum';
import { ROLES_KEY } from './roles.decorator'; // Asegúrate de importar el decorador correcto
@Injectable()
export class RolesGuard implements CanActivate {
constructor(private reflector: Reflector) {}
canActivate(context: ExecutionContext): boolean {
const requiredRoles = this.reflector.getAllAndOverride<Role[]>(ROLES_KEY, [
context.getHandler(),
context.getClass(),
]);
if (!requiredRoles) {
return true; // Si no hay roles requeridos, se permite el acceso
}
const request = context.switchToHttp().getRequest();
const permissionsHeader = request.headers['permissions'];
if (!permissionsHeader) {
return false; // Si no hay encabezado 'permissions', se niega el acceso
}
const userRoles: Role[] = JSON.parse(permissionsHeader);
return requiredRoles.some(role => userRoles.includes(role));
}
}