diff --git a/src/dto/input/id-institucion-optional.dto.ts b/src/dto/input/id-institucion-optional.dto.ts new file mode 100644 index 0000000..7c50554 --- /dev/null +++ b/src/dto/input/id-institucion-optional.dto.ts @@ -0,0 +1,7 @@ +import { IsNumberString, IsOptional } from 'class-validator'; + +export class IdInstitucionOptionalDto { + @IsNumberString() + @IsOptional() + id_institucion?: string; +} diff --git a/src/modulo-motivo/modulo-motivo.controller.ts b/src/modulo-motivo/modulo-motivo.controller.ts index 780fc1a..9b9239d 100644 --- a/src/modulo-motivo/modulo-motivo.controller.ts +++ b/src/modulo-motivo/modulo-motivo.controller.ts @@ -66,7 +66,7 @@ export class ModuloMotivoController { reporte(@Request() req, @Query() query: ModuloDto) { const admin: Operador = req.user.operador; - this.validarUsuarioService.validarAdmin(admin); + this.validarUsuarioService.validarSuperAdminAdmin(admin); return this.moduloMotivoService.findAllByIdModulo( admin, parseInt(query.id_modulo), diff --git a/src/modulo-motivo/modulo-motivo.service.ts b/src/modulo-motivo/modulo-motivo.service.ts index b2b4588..b2015b7 100644 --- a/src/modulo-motivo/modulo-motivo.service.ts +++ b/src/modulo-motivo/modulo-motivo.service.ts @@ -49,7 +49,10 @@ export class ModuloMotivoService { const options: FindManyOptions = { where: { modulo } }; // Validamos que el módulo pertenezca a la institución del admin - if (modulo.institucion.id_institucion != admin.institucion.id_institucion) + if ( + admin.tipoUsuario.id_tipo_usuario > 2 && + modulo.institucion.id_institucion != admin.institucion.id_institucion + ) throw new ForbiddenException( 'No puedes acceder a esta información porque no le pertenece a tu institución.', ); diff --git a/src/modulo/modulo.controller.ts b/src/modulo/modulo.controller.ts index fc6c5e2..85f9596 100644 --- a/src/modulo/modulo.controller.ts +++ b/src/modulo/modulo.controller.ts @@ -21,6 +21,7 @@ import { ModuloService } from './modulo.service'; import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { IdInstitucionDto } from '../dto/input/id-institucion.dto'; +import { IdInstitucionOptionalDto } from '../dto/input/id-institucion-optional.dto'; import { CreateModuloDto } from './dto/input/create.dto'; import { ModuloDto } from './dto/input/modulo.dto'; import { UpdateModuloDto } from './dto/input/update.dto'; @@ -71,12 +72,12 @@ export class ModuloController { return this.moduloService.findMinInfoById(parseInt(query.id_modulo)); } - @Serealize(OnlyModuloOutputDto) + @Serealize(ModuloOutputDto) @Get('modulos') @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Todos los módulos de una institución.' }) @ApiBearerAuth('jwt') - modulos(@Request() req, @Query() query: IdInstitucionDto) { + modulos(@Request() req, @Query() query: IdInstitucionOptionalDto) { const superAdmin: Operador = req.user.operador; this.validarUsuarioService.validarSuperAdmin(superAdmin); diff --git a/src/modulo/modulo.service.ts b/src/modulo/modulo.service.ts index 58503f4..ce9aa8d 100644 --- a/src/modulo/modulo.service.ts +++ b/src/modulo/modulo.service.ts @@ -6,7 +6,7 @@ import { NotFoundException, } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; +import { FindOptionsWhere, Repository } from 'typeorm'; import { Institucion } from '../institucion/entity/institucion.entity'; import { Modulo } from './entity/modulo.entity'; import { Operador } from '../operador/entity/operador.entity'; @@ -43,14 +43,15 @@ export class ModuloService { .then((_) => ({ message: 'Se creó correctamente un nuevo módulo.' })); } - findAll(id_institucion: number): Promise { - return this.institucionService - .findById(id_institucion) - .then((institucion) => - this.fullInformacionModuloView.find({ - where: { id_institucion: institucion.id_institucion }, - }), - ) + async findAll(id_institucion?: number): Promise { + const institucion = id_institucion + ? await this.institucionService.findById(id_institucion) + : null; + const busqueda: FindOptionsWhere = {}; + + if (institucion) busqueda.id_institucion = institucion.id_institucion; + return this.fullInformacionModuloView + .find({ where: busqueda }) .then((infoModulos) => { const modulos: Modulo[] = [];