From 88e2c4e9b31e935d1015a1612014d499f6de949c Mon Sep 17 00:00:00 2001 From: IO Date: Tue, 25 Jun 2024 20:11:55 -0600 Subject: [PATCH 1/7] no important --- src/adscripcion/adscripcion.controller.spec.ts | 2 +- src/adscripcion/adscripcion.service.spec.ts | 6 +++--- src/auth/auth.guard.ts | 4 ++-- src/auth/auth.service.ts | 2 +- src/categoria/categiria.controller.spec.ts | 4 ++-- src/categoria/categoria.service.spec.ts | 6 +++--- src/edificio/edificio.controller.spec.ts | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/adscripcion/adscripcion.controller.spec.ts b/src/adscripcion/adscripcion.controller.spec.ts index 50d3736..0d73f84 100644 --- a/src/adscripcion/adscripcion.controller.spec.ts +++ b/src/adscripcion/adscripcion.controller.spec.ts @@ -1,7 +1,7 @@ import { Test, TestingModule } from '@nestjs/testing'; import { AdscripcionController } from './adscripcion.controller'; // Asumiendo que el controlador se llama EdificioController -describe('EdificioController', () => { +describe('AdscripcionController', () => { let controller: AdscripcionController; beforeEach(async () => { diff --git a/src/adscripcion/adscripcion.service.spec.ts b/src/adscripcion/adscripcion.service.spec.ts index 71b2adf..b74f297 100644 --- a/src/adscripcion/adscripcion.service.spec.ts +++ b/src/adscripcion/adscripcion.service.spec.ts @@ -1,12 +1,12 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { AdscripcionService } from './adscripcion.service'; // Asegúrate de importar el servicio correcto +import { AdscripcionService } from './adscripcion.service'; -describe('EdificioService', () => { +describe('AdscripcionService', () => { let service: AdscripcionService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - providers: [AdscripcionService], // Asegúrate de incluir el servicio correcto aquí + providers: [AdscripcionService], }).compile(); service = module.get(AdscripcionService); diff --git a/src/auth/auth.guard.ts b/src/auth/auth.guard.ts index 7f5aba5..3f8b533 100644 --- a/src/auth/auth.guard.ts +++ b/src/auth/auth.guard.ts @@ -19,7 +19,7 @@ import { const request = context.switchToHttp().getRequest(); const token = this.extractTokenFromHeader(request); if (!token) { - throw new UnauthorizedException(); + throw new UnauthorizedException('token faltante'); } try { const payload = await this.jwtService.verifyAsync( @@ -31,7 +31,7 @@ import { request['user'] = payload; } catch { - throw new UnauthorizedException(); + throw new UnauthorizedException('algo fallo'); } return true; } diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 5b88f77..7fd4479 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -50,7 +50,7 @@ export class AuthService { throw new UnauthorizedException('Invalid password'); } const payload = { - idUser: user.id_usuario, + id_usuario: user.id_usuario, username: user.usuario, }; const token = this.jwtService.sign(payload); diff --git a/src/categoria/categiria.controller.spec.ts b/src/categoria/categiria.controller.spec.ts index 33658e3..1455267 100644 --- a/src/categoria/categiria.controller.spec.ts +++ b/src/categoria/categiria.controller.spec.ts @@ -1,7 +1,7 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { CategoriaController } from './categoria.controller'; // Asumiendo que el controlador se llama EdificioController +import { CategoriaController } from './categoria.controller'; -describe('EdificioController', () => { +describe('CategoriaController', () => { let controller: CategoriaController; beforeEach(async () => { diff --git a/src/categoria/categoria.service.spec.ts b/src/categoria/categoria.service.spec.ts index 7018274..9c5f1b4 100644 --- a/src/categoria/categoria.service.spec.ts +++ b/src/categoria/categoria.service.spec.ts @@ -1,12 +1,12 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { CategoriaService } from './categoria.service'; // Asegúrate de importar el servicio correcto +import { CategoriaService } from './categoria.service'; -describe('EdificioService', () => { +describe('CategoriaService', () => { let service: CategoriaService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - providers: [CategoriaService], // Asegúrate de incluir el servicio correcto aquí + providers: [CategoriaService], }).compile(); service = module.get(CategoriaService); diff --git a/src/edificio/edificio.controller.spec.ts b/src/edificio/edificio.controller.spec.ts index e1176d2..a30c9c4 100644 --- a/src/edificio/edificio.controller.spec.ts +++ b/src/edificio/edificio.controller.spec.ts @@ -1,5 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { EdificioController } from './edificio.controller'; // Asumiendo que el controlador se llama EdificioController +import { EdificioController } from './edificio.controller'; describe('EdificioController', () => { let controller: EdificioController; From c3b86c15df90bc362eb2fcafd6a208ae8a8e443d Mon Sep 17 00:00:00 2001 From: IO Date: Tue, 25 Jun 2024 20:19:27 -0600 Subject: [PATCH 2/7] data profesor --- src/datos_academicos/datos_academicos.controller.ts | 6 +++++- src/datos_academicos/datos_academicos.service.ts | 4 ++++ .../lineas_investigacion.controller.ts | 7 +++++-- src/lineas_investigacion/lineas_investigacion.service.ts | 4 ++++ .../proyectos_academicos.controller.ts | 7 +++++-- src/proyectos_academicos/proyectos_academicos.service.ts | 4 ++++ 6 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/datos_academicos/datos_academicos.controller.ts b/src/datos_academicos/datos_academicos.controller.ts index d567d16..80549b6 100644 --- a/src/datos_academicos/datos_academicos.controller.ts +++ b/src/datos_academicos/datos_academicos.controller.ts @@ -1,8 +1,12 @@ -import { Controller, Delete, Param } from '@nestjs/common'; +import { Controller, Get } from '@nestjs/common'; import { DatosAcademicosService } from './datos_academicos.service'; @Controller('datos-academicos') export class DatosAcademicosController { constructor(private readonly datosAcademicosService: DatosAcademicosService) {} + @Get() + findAll() { + return this.datosAcademicosService.findAll(); + } } diff --git a/src/datos_academicos/datos_academicos.service.ts b/src/datos_academicos/datos_academicos.service.ts index b78852f..e275376 100644 --- a/src/datos_academicos/datos_academicos.service.ts +++ b/src/datos_academicos/datos_academicos.service.ts @@ -14,4 +14,8 @@ export class DatosAcademicosService { async removeByProfesorId(id_profesor: number): Promise { await this.datosAcademicosRepository.delete({ profesor: { id_profesor } }); } + + async findAll(): Promise { + return this.datosAcademicosRepository.find(); + } } diff --git a/src/lineas_investigacion/lineas_investigacion.controller.ts b/src/lineas_investigacion/lineas_investigacion.controller.ts index 6321185..c35e25e 100644 --- a/src/lineas_investigacion/lineas_investigacion.controller.ts +++ b/src/lineas_investigacion/lineas_investigacion.controller.ts @@ -1,9 +1,12 @@ -import { Controller, Delete, Param } from '@nestjs/common'; +import { Controller, Get } from '@nestjs/common'; import { LineasInvestigacionService } from './lineas_investigacion.service'; @Controller('lineas-investigacion') export class LineasInvestigacionController { constructor(private readonly lineasInvestigacionService: LineasInvestigacionService) {} - + @Get() + findAll() { + return this.lineasInvestigacionService.findAll(); + } } diff --git a/src/lineas_investigacion/lineas_investigacion.service.ts b/src/lineas_investigacion/lineas_investigacion.service.ts index a73dda6..b04c3c2 100644 --- a/src/lineas_investigacion/lineas_investigacion.service.ts +++ b/src/lineas_investigacion/lineas_investigacion.service.ts @@ -14,4 +14,8 @@ export class LineasInvestigacionService { async removeByProfesorId(id_profesor: number): Promise { await this.lineasInvestigacionRepository.delete({ profesor: { id_profesor } }); } + + async findAll(): Promise { + return this.lineasInvestigacionRepository.find(); + } } diff --git a/src/proyectos_academicos/proyectos_academicos.controller.ts b/src/proyectos_academicos/proyectos_academicos.controller.ts index 96cabce..a226ba0 100644 --- a/src/proyectos_academicos/proyectos_academicos.controller.ts +++ b/src/proyectos_academicos/proyectos_academicos.controller.ts @@ -1,9 +1,12 @@ -import { Controller, Delete, Param } from '@nestjs/common'; +import { Controller,Get } from '@nestjs/common'; import { ProyectosAcademicosService } from './proyectos_academicos.service'; @Controller('proyectos-academicos') export class ProyectosAcademicosController { constructor(private readonly proyectosAcademicosService: ProyectosAcademicosService) {} - + @Get() + findAll() { + return this.proyectosAcademicosService.findAll(); + } } diff --git a/src/proyectos_academicos/proyectos_academicos.service.ts b/src/proyectos_academicos/proyectos_academicos.service.ts index 485d931..dbff8d0 100644 --- a/src/proyectos_academicos/proyectos_academicos.service.ts +++ b/src/proyectos_academicos/proyectos_academicos.service.ts @@ -14,4 +14,8 @@ export class ProyectosAcademicosService { async removeByProfesorId(id_profesor: number): Promise { await this.proyectosAcademicosRepository.delete({ profesor: { id_profesor } }); } + + async findAll(): Promise { + return this.proyectosAcademicosRepository.find(); + } } From 7b74d28786caf11eee6e932541a8f029a44751b4 Mon Sep 17 00:00:00 2001 From: IO Date: Tue, 25 Jun 2024 20:46:31 -0600 Subject: [PATCH 3/7] injects --- src/Profesor/profesor.service.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Profesor/profesor.service.ts b/src/Profesor/profesor.service.ts index a620eec..11c862a 100644 --- a/src/Profesor/profesor.service.ts +++ b/src/Profesor/profesor.service.ts @@ -6,6 +6,9 @@ import { ProyectosAcademicosService } from '../proyectos_academicos/proyectos_ac import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { profesorDto } from './dto/profesorDto.dto'; +import { ProyectosAcademicos } from '../proyectos_academicos/entities/proyectos_academicos.entity'; +import { DatosAcademicos } from '../datos_academicos/entities/datos_academicos.entity' +import { LineasInvestigacion } from '../lineas_investigacion/entities/lineas_investigacion.entity' @Injectable() export class ProfesorService { @@ -14,6 +17,12 @@ export class ProfesorService { private datosAcademicosService: DatosAcademicosService, private lineasInvestigacionService: LineasInvestigacionService, private proyectosAcademicosService: ProyectosAcademicosService, + @InjectRepository(ProyectosAcademicos) + private readonly proyectosAcademicosRepository: Repository, + @InjectRepository(DatosAcademicos) + private readonly datosAcademicosRepository: Repository, + @InjectRepository(LineasInvestigacion) + private readonly lineasInvestigacionRepository: Repository, ) {} //register teacher From fb1b0896253d2d683c37f30b636817c76b626092 Mon Sep 17 00:00:00 2001 From: IO Date: Tue, 25 Jun 2024 20:53:32 -0600 Subject: [PATCH 4/7] dto --- src/Profesor/dto/profesorDto.dto.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Profesor/dto/profesorDto.dto.ts b/src/Profesor/dto/profesorDto.dto.ts index 1f083e4..d69c1b2 100644 --- a/src/Profesor/dto/profesorDto.dto.ts +++ b/src/Profesor/dto/profesorDto.dto.ts @@ -80,4 +80,17 @@ export class profesorDto{ @IsBoolean() @IsOptional() mostrar: boolean; +} + +export class CreateProyectoDto { + proyecto: string; +} + +export class CreateDatosAcademicos{ + grado_maximo: string; + grados_obtenidos: string; +} + +export class CreateLineasInvestigacion{ + lineas_inv: string; } \ No newline at end of file From 78e25b1d38be6ca18428c37d0685c9711aa1b9d9 Mon Sep 17 00:00:00 2001 From: IO Date: Tue, 25 Jun 2024 20:56:08 -0600 Subject: [PATCH 5/7] dto update --- src/Profesor/dto/profesorDto.dto.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Profesor/dto/profesorDto.dto.ts b/src/Profesor/dto/profesorDto.dto.ts index d69c1b2..a4e95d5 100644 --- a/src/Profesor/dto/profesorDto.dto.ts +++ b/src/Profesor/dto/profesorDto.dto.ts @@ -83,14 +83,26 @@ export class profesorDto{ } export class CreateProyectoDto { + + @IsOptional() + @Length(500) proyecto: string; } export class CreateDatosAcademicos{ + + @IsOptional() + @Length(30) grado_maximo: string; + + @IsOptional() + @Length(600) grados_obtenidos: string; } export class CreateLineasInvestigacion{ + + @IsOptional() + @Length(300) lineas_inv: string; } \ No newline at end of file From b62f587b9db8eac48c3ce265af9a8222e6ac46fc Mon Sep 17 00:00:00 2001 From: IO Date: Tue, 25 Jun 2024 21:32:45 -0600 Subject: [PATCH 6/7] add lineas_investigacion,proyectos_academicos,datos_academicos to filter,register and update --- src/Profesor/dto/profesorDto.dto.ts | 40 ++++---- src/Profesor/entities/profesor.entity.ts | 4 +- src/Profesor/profesor.service.ts | 99 +++++++++++++++++-- .../entities/lineas_investigacion.entity.ts | 2 +- 4 files changed, 118 insertions(+), 27 deletions(-) diff --git a/src/Profesor/dto/profesorDto.dto.ts b/src/Profesor/dto/profesorDto.dto.ts index a4e95d5..b72d140 100644 --- a/src/Profesor/dto/profesorDto.dto.ts +++ b/src/Profesor/dto/profesorDto.dto.ts @@ -8,47 +8,47 @@ export class profesorDto{ @IsString() @IsOptional() - @Length(10) + @Length(0,10) num_trabajador: string; @IsString() @IsNotEmpty() - @Length(80) + @Length(0,80) nombre: string; @IsString() @IsOptional() - @Length(10) + @Length(0,10) rfc: string; @IsString() @IsOptional() - @Length(3) + @Length(0,3) homoclave: string; @IsString() @IsOptional() - @Length(13) + @Length(0,13) tel_oficina: string; @IsString() @IsOptional() - @Length(10) + @Length(0,10) extension: string; @IsString() @IsOptional() - @Length(13) + @Length(0,13) tel_personal: string; @IsString() @IsOptional() - @Length(65) + @Length(0,65) correo_pcp: string; @IsString() @IsOptional() - @Length(65) + @Length(0,65) correo_per: string; @IsNumber() @@ -65,12 +65,12 @@ export class profesorDto{ @IsString() @IsOptional() - @Length(256) + @Length(0,256) ubicacion: string; @IsString() @IsOptional() - @Length(150) + @Length(0,150) fotografia: string; @IsBoolean() @@ -80,29 +80,33 @@ export class profesorDto{ @IsBoolean() @IsOptional() mostrar: boolean; + + proyectosAcademicos: ProyectoDto[]; + datosAcademicos: DatosAcademicos[]; + lineasInvestigacion: LineasInvestigacion[]; } -export class CreateProyectoDto { +export class ProyectoDto { @IsOptional() - @Length(500) + @Length(0, 500) proyecto: string; } -export class CreateDatosAcademicos{ +export class DatosAcademicos{ @IsOptional() - @Length(30) + @Length(0,30) grado_maximo: string; @IsOptional() - @Length(600) + @Length(0,600) grados_obtenidos: string; } -export class CreateLineasInvestigacion{ +export class LineasInvestigacion{ @IsOptional() - @Length(300) + @Length(0,300) lineas_inv: string; } \ No newline at end of file diff --git a/src/Profesor/entities/profesor.entity.ts b/src/Profesor/entities/profesor.entity.ts index 31e3264..07cc908 100644 --- a/src/Profesor/entities/profesor.entity.ts +++ b/src/Profesor/entities/profesor.entity.ts @@ -104,10 +104,10 @@ export class Profesor { @OneToMany(() => DatosAcademicos, datosAcademicos => datosAcademicos.profesor) datosAcademicos: DatosAcademicos[]; - @OneToMany(() => LineasInvestigacion, lineasInvestigacion => lineasInvestigacion.profesor) + @OneToMany(() => LineasInvestigacion, linea => linea.profesor) lineasInvestigacion: LineasInvestigacion[]; - @OneToMany(() => ProyectosAcademicos, proyectosAcademicos => proyectosAcademicos.profesor) + @OneToMany(() => ProyectosAcademicos, proyecto => proyecto.profesor) proyectosAcademicos: ProyectosAcademicos[]; } diff --git a/src/Profesor/profesor.service.ts b/src/Profesor/profesor.service.ts index 11c862a..b000255 100644 --- a/src/Profesor/profesor.service.ts +++ b/src/Profesor/profesor.service.ts @@ -27,7 +27,7 @@ export class ProfesorService { //register teacher async register(data: profesorDto) { - const {num_trabajador,rfc } = data; + const {num_trabajador,rfc,proyectosAcademicos, datosAcademicos, lineasInvestigacion } = data; const existrfc = await this.profesorRepository.findOne({where:{rfc}}); if(existrfc){ @@ -40,7 +40,45 @@ export class ProfesorService { } const newProfesor = this.profesorRepository.create(data); - return this.profesorRepository.save(newProfesor); + const savedProfesor = await this.profesorRepository.save(newProfesor); + + if (proyectosAcademicos && proyectosAcademicos.length > 0) { + const proyectos = proyectosAcademicos.map(proyecto => { + const newProyecto = this.proyectosAcademicosRepository.create({ + ...proyecto, + profesor: savedProfesor, + id_profesor: savedProfesor.id_profesor, + }); + return newProyecto; + }); + await this.proyectosAcademicosRepository.save(proyectos); + } + + if (datosAcademicos && datosAcademicos.length > 0) { + const datos = datosAcademicos.map(dato => { + const newDato = this.datosAcademicosRepository.create({ + ...dato, + profesor: savedProfesor, + id_profesor: savedProfesor.id_profesor, + }); + return newDato; + }); + await this.datosAcademicosRepository.save(datos); + } + + if (lineasInvestigacion && lineasInvestigacion.length > 0) { + const lineas = lineasInvestigacion.map(linea => { + const newLinea = this.lineasInvestigacionRepository.create({ + ...linea, + profesor: savedProfesor, + id_profesor: savedProfesor.id_profesor, + }); + return newLinea; + }); + await this.lineasInvestigacionRepository.save(lineas); + } + + return savedProfesor; } //brings all teachers @@ -59,8 +97,50 @@ export class ProfesorService { throw new HttpException('Profesor not found', 404); } - Object.assign(profesor, data); - return this.profesorRepository.save(profesor); + const { proyectosAcademicos, datosAcademicos, lineasInvestigacion, ...profesorData } = data; + Object.assign(profesor, profesorData); + const savedProfesor = await this.profesorRepository.save(profesor); + + if (proyectosAcademicos) { + await this.proyectosAcademicosRepository.delete({ profesor: { id_profesor } }); + const proyectos = proyectosAcademicos.map(proyecto => { + const newProyecto = this.proyectosAcademicosRepository.create({ + ...proyecto, + profesor: savedProfesor, + id_profesor: savedProfesor.id_profesor, + }); + return newProyecto; + }); + await this.proyectosAcademicosRepository.save(proyectos); + } + + if (datosAcademicos) { + await this.datosAcademicosRepository.delete({ profesor: { id_profesor } }); + const datos = datosAcademicos.map(dato => { + const newDato = this.datosAcademicosRepository.create({ + ...dato, + profesor: savedProfesor, + id_profesor: savedProfesor.id_profesor, + }); + return newDato; + }); + await this.datosAcademicosRepository.save(datos); + } + + if (lineasInvestigacion) { + await this.lineasInvestigacionRepository.delete({ profesor: { id_profesor } }); + const lineas = lineasInvestigacion.map(linea => { + const newLinea = this.lineasInvestigacionRepository.create({ + ...linea, + profesor: savedProfesor, + id_profesor: savedProfesor.id_profesor, + }); + return newLinea; + }); + await this.lineasInvestigacionRepository.save(lineas); + } + + return savedProfesor; } //remove teacher @@ -120,8 +200,15 @@ export class ProfesorService { return query.getMany(); } - async findAllPaginated(page: number, limit: number, filters: any): Promise<{ profesores: Profesor[], total: number, totalPages: number }> { - const query = this.profesorRepository.createQueryBuilder('profesor'); + async findAllPaginated( + page: number, + limit: number, + filters: any + ): Promise<{ profesores: Profesor[], total: number, totalPages: number }> { + const query = this.profesorRepository.createQueryBuilder('profesor') + .leftJoinAndSelect('profesor.proyectosAcademicos', 'proyectosAcademicos') + .leftJoinAndSelect('profesor.datosAcademicos', 'datosAcademicos') + .leftJoinAndSelect('profesor.lineasInvestigacion', 'lineasInvestigacion'); if (filters.nombre) { query.andWhere('profesor.nombre LIKE :nombre', { nombre: `%${filters.nombre}%` }); diff --git a/src/lineas_investigacion/entities/lineas_investigacion.entity.ts b/src/lineas_investigacion/entities/lineas_investigacion.entity.ts index 7e713e7..dc9bb8d 100644 --- a/src/lineas_investigacion/entities/lineas_investigacion.entity.ts +++ b/src/lineas_investigacion/entities/lineas_investigacion.entity.ts @@ -16,7 +16,7 @@ export class LineasInvestigacion { @Column({ type: 'varchar', length: 350, nullable: true }) lineas_inv_html: string; - @ManyToOne(() => Profesor, profesor => profesor.lineasInvestigacion) + @ManyToOne(() => Profesor, profesor => profesor.lineasInvestigacion) @JoinColumn({ name: 'id_profesor' }) profesor: Profesor; } From e80f2868c5e67c0c8ef7b74a4c9443bc7206e212 Mon Sep 17 00:00:00 2001 From: IO Date: Tue, 25 Jun 2024 22:03:37 -0600 Subject: [PATCH 7/7] 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)); }