From e80f2868c5e67c0c8ef7b74a4c9443bc7206e212 Mon Sep 17 00:00:00 2001 From: IO Date: Tue, 25 Jun 2024 22:03:37 -0600 Subject: [PATCH] fixed guard --- src/auth/auth.service.ts | 4 ++-- src/permissions/roles.guard.ts | 32 +++++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index beaf186..6dd715f 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -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); diff --git a/src/permissions/roles.guard.ts b/src/permissions/roles.guard.ts index 15a246f..b1a5503 100644 --- a/src/permissions/roles.guard.ts +++ b/src/permissions/roles.guard.ts @@ -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(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)); }