fixed guard

This commit is contained in:
IO
2024-06-25 22:03:37 -06:00
parent b62f587b9d
commit e80f2868c5
2 changed files with 25 additions and 11 deletions
+2 -2
View File
@@ -52,8 +52,8 @@ export class AuthService {
const payload = {
id_usuario: user.id_usuario,
username: user.usuario,
permissions: user.id_tipo_usuario,
usuario: user.usuario,
id_tipo_usuario: user.id_tipo_usuario,
};
const token = this.jwtService.sign(payload);
+23 -9
View File
@@ -1,13 +1,12 @@
// roles.guard.ts
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Injectable, CanActivate, ExecutionContext, UnauthorizedException } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { JwtService } from '@nestjs/jwt';
import { Role } from './role.enum';
import { ROLES_KEY } from './roles.decorator'; // Asegúrate de importar el decorador correcto
import { ROLES_KEY } from './roles.decorator';
@Injectable()
export class RolesGuard implements CanActivate {
constructor(private reflector: Reflector) {}
constructor(private reflector: Reflector, private jwtService: JwtService) {}
canActivate(context: ExecutionContext): boolean {
const requiredRoles = this.reflector.getAllAndOverride<Role[]>(ROLES_KEY, [
@@ -20,13 +19,28 @@ export class RolesGuard implements CanActivate {
}
const request = context.switchToHttp().getRequest();
const permissionsHeader = request.headers['permissions'];
const authHeader = request.headers['authorization'];
if (!permissionsHeader) {
return false; // Si no hay encabezado 'permissions', se niega el acceso
if (!authHeader) {
throw new UnauthorizedException('No authorization header provided');
}
const userRoles: Role[] = JSON.parse(permissionsHeader);
const [, token] = authHeader.split(' '); // Asumiendo que el formato es 'Bearer TOKEN'
if (!token) {
throw new UnauthorizedException('No token provided');
}
let userPayload;
try {
userPayload = this.jwtService.verify(token);
} catch (error) {
throw new UnauthorizedException('Invalid token');
}
const userRoles: Role[] = userPayload.id_tipo_usuario;
if (!userRoles) {
return false; // Si el token no contiene roles, se niega el acceso
}
return requiredRoles.some(role => userRoles.includes(role));
}