diff --git a/src/auth/strategy/jwt-strategy.service.ts b/src/auth/strategy/jwt-strategy.service.ts index e5a6c6e..69e071a 100644 --- a/src/auth/strategy/jwt-strategy.service.ts +++ b/src/auth/strategy/jwt-strategy.service.ts @@ -1,4 +1,4 @@ -import { ConflictException, Injectable } from '@nestjs/common'; +import { ForbiddenException, Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { PassportStrategy } from '@nestjs/passport'; import { Strategy, ExtractJwt } from 'passport-jwt'; @@ -37,14 +37,14 @@ export class JwtStrategyService extends PassportStrategy(Strategy) { .findById(payload.id_operador) .then(async (operador) => { if (!operador.activo) - throw new ConflictException('Esta cuenta esta desactivada.'); + throw new ForbiddenException('Esta cuenta esta desactivada.'); if (operador.tipoUsuario.id_tipo_usuario === 4) { if (payload.id_modulo) await this.moduloService .findById(payload.id_modulo) .then((modulo) => (user.modulo = modulo)); else - throw new ConflictException( + throw new ForbiddenException( 'Credenciales no válidas, inicia sesión de nuevo.', ); } diff --git a/src/equipo-programa/equipo-programa.controller.ts b/src/equipo-programa/equipo-programa.controller.ts index ad71fd4..064f981 100644 --- a/src/equipo-programa/equipo-programa.controller.ts +++ b/src/equipo-programa/equipo-programa.controller.ts @@ -30,7 +30,17 @@ export class EquipoProgramaController { description: 'Ambas variables son obligatorios.', examples: { ejemplo: { value: { id_equipo: 1, id_programa: 1 } } }, }) - create(@Body() body: CreateEquipoProgramaDto) { + create(@Request() req, @Body() body: CreateEquipoProgramaDto) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para realizar esta acción.', + ); return this.equipoProgramaService.create(body.id_equipo, body.id_programa); } diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts index aa6490a..35d4076 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts @@ -1,7 +1,16 @@ -import { Body, Controller, Delete, Post, UseGuards } from '@nestjs/common'; +import { + Body, + Controller, + Delete, + ForbiddenException, + Post, + Request, + UseGuards, +} from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger'; import { EquipoTipoEntradaService } from './equipo-tipo-entrada.service'; +import { Operador } from 'src/operador/entity/operador.entity'; import { CreateEquipoTipoEntradaDto } from './dto/input/create.dto'; import { DeleteEquipoTipoEntradaDto } from './dto/input/delete.dto'; @@ -21,7 +30,17 @@ export class EquipoTipoEntradaController { description: 'Ambas variables son obligatorios.', examples: { ejemplo: { value: { id_equipo: 1, id_tipo_entrada: 1 } } }, }) - create(@Body() body: CreateEquipoTipoEntradaDto) { + create(@Request() req, @Body() body: CreateEquipoTipoEntradaDto) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para realizar esta acción.', + ); return this.equipoTipoEntradaService.create( body.id_equipo, body.id_tipo_entrada, @@ -39,7 +58,17 @@ export class EquipoTipoEntradaController { description: 'La variable id_equipo_tipo_entrada es obligatoria.', examples: { ejemplo: { value: { id_equipo_tipo_entrada: 1 } } }, }) - delete(@Body() body: DeleteEquipoTipoEntradaDto) { + delete(@Request() req, @Body() body: DeleteEquipoTipoEntradaDto) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para realizar esta acción.', + ); return this.equipoTipoEntradaService.delete(body.id_equipo_tipo_entrada); } } diff --git a/src/hora-excepcion/dto/input/update.dto.ts b/src/hora-excepcion/dto/input/update.dto.ts deleted file mode 100644 index 3e43168..0000000 --- a/src/hora-excepcion/dto/input/update.dto.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { IsInt, IsMilitaryTime, IsOptional } from 'class-validator'; - -export class UpdateHoraExcepcionDto { - @IsInt() - id_hora_excepcion: number; - - @IsMilitaryTime() - @IsOptional() - hora_fin?: string; - - @IsMilitaryTime() - @IsOptional() - hora_inicio?: string; -} diff --git a/src/hora-excepcion/hora-excepcion.controller.ts b/src/hora-excepcion/hora-excepcion.controller.ts index 7c58d5c..324ba4e 100644 --- a/src/hora-excepcion/hora-excepcion.controller.ts +++ b/src/hora-excepcion/hora-excepcion.controller.ts @@ -1,11 +1,10 @@ import { Body, - ConflictException, Controller, Delete, + ForbiddenException, Get, Post, - Put, Query, Request, UseGuards, @@ -24,7 +23,6 @@ import { Operador } from 'src/operador/entity/operador.entity'; import { CreateHoraExcepcionDto } from './dto/input/create.dto'; import { DeleteHoraExcepcionDto } from './dto/input/delete.dto'; import { GetHoraExcepcionDto } from './dto/input/get.dto'; -import { UpdateHoraExcepcionDto } from './dto/input/update.dto'; import { HoraExcepcionOutputDto } from './dto/output/hora-excepcion.dto'; @Controller('hora-excepcion') @@ -54,7 +52,7 @@ export class HoraExcepcionController { const admin: Operador = req.user.operador; if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.horaExcepcionService.create( @@ -79,7 +77,7 @@ export class HoraExcepcionController { const admin: Operador = req.user.operador; if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.horaExcepcionService.delete(admin, body.id_hora_excepcion); @@ -97,35 +95,15 @@ export class HoraExcepcionController { description: 'Id de la institucion día', name: 'id_institucion_dia', }) - get(@Query() query: GetHoraExcepcionDto) { + get(@Request() req, @Query() query: GetHoraExcepcionDto) { + const admin: Operador = req.user.operador; + + if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.horaExcepcionService.findAllByIdInstitucionDia( parseInt(query.id_institucion_dia), ); } - - @Put() - @UseGuards(AuthGuard('jwt')) - @ApiOperation({ - description: - 'Endpoint que actualiza lan información de una hora excepcion.', - }) - @ApiBearerAuth('jwt') - @ApiBody({ - description: - 'Todoas las variables a excepción de id_hora_excepcion son opcionales pero se tiene que mandar forzosamente una hora.', - examples: { - ejemplo: { - value: { id_hora_excepcion: 1, _hora_fin: '', _hora_inicio: '' }, - }, - }, - }) - update(@Request() req, @Body() body: UpdateHoraExcepcionDto) { - const admin: Operador = req.user.operador; - - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ConflictException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); - return this.horaExcepcionService.update(admin, body); - } } diff --git a/src/hora-excepcion/hora-excepcion.service.ts b/src/hora-excepcion/hora-excepcion.service.ts index 9385787..ac7b045 100644 --- a/src/hora-excepcion/hora-excepcion.service.ts +++ b/src/hora-excepcion/hora-excepcion.service.ts @@ -2,6 +2,7 @@ import { ConflictException, NotFoundException, Injectable, + BadRequestException, } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { @@ -94,43 +95,6 @@ export class HoraExcepcionService { }); } - update(admin: Operador, attrs: Partial) { - return this.findById(attrs.id_hora_excepcion) - .then(async (horaExecpcion) => { - if ( - admin.institucion.id_institucion != - horaExecpcion.institucionDia.institucion.id_institucion - ) - throw new ConflictException( - 'No puedes actualizar la información de este tipo de carrito porque no le pertenece a tu institución.', - ); - if ( - (attrs.hora_inicio && - !attrs.hora_fin && - attrs.hora_inicio > horaExecpcion.hora_fin) || - (!attrs.hora_inicio && - attrs.hora_fin && - horaExecpcion.hora_inicio > attrs.hora_fin) || - (attrs.hora_inicio && - attrs.hora_fin && - attrs.hora_inicio > attrs.hora_fin) - ) - throw new ConflictException( - 'La hora inicio no puede ser más grande que la hora fin.', - ); - await this.validarHoras( - horaExecpcion.institucionDia, - attrs.hora_inicio, - attrs.hora_fin, - ); - Object.assign(horaExecpcion, attrs); - return this.repository.save(horaExecpcion); - }) - .then((_) => ({ - message: 'Se guardaron los cambios correctamente.', - })); - } - validarHoras( institucionDia: InstitucionDia, hora_inicio?: string, @@ -165,7 +129,7 @@ export class HoraExcepcionService { existeHoraExcepcion.hora_inicio === hora_inicio ) throw new ConflictException('Ya existe este horario sin servicio.'); - throw new ConflictException( + throw new BadRequestException( 'Las horas escogídas se sobrelapan con otro horario sin servicio del mismo día.', ); } diff --git a/src/institucion-dia/institucion-dia.controller.ts b/src/institucion-dia/institucion-dia.controller.ts index 3e97d4e..49bc55f 100644 --- a/src/institucion-dia/institucion-dia.controller.ts +++ b/src/institucion-dia/institucion-dia.controller.ts @@ -22,6 +22,7 @@ import { Operador } from 'src/operador/entity/operador.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { UpdateInstitucionDiaDto } from './dto/input/update.dto'; import { InstitucionCarreaOutputDto } from './dto/output/institucion-carrera.dto'; +import { Usuario } from 'src/usuario/entity/usuario.entity'; @Controller('institucion-dia') @ApiTags('institucion-dia') @@ -40,7 +41,13 @@ export class InstitucionDiaController { name: 'id_institucion', type: 'string', }) - dias(@Query() query: IdInstitucionDto) { + dias(@Request() req, @Query() query: IdInstitucionDto) { + const admin: Operador = req.user.operador; + + if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.institucionDiaService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -59,7 +66,13 @@ export class InstitucionDiaController { name: 'id_institucion', type: 'string', }) - hoy(@Query() query: IdInstitucionDto) { + hoy(@Request() req, @Query() query: IdInstitucionDto) { + const usuario: Usuario = req.user.usuario; + + if (!usuario) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.institucionDiaService.hoy(parseInt(query.id_institucion)); } diff --git a/src/institucion-infraccion/institucion-infraccion.controller.ts b/src/institucion-infraccion/institucion-infraccion.controller.ts index fc8215c..d213c09 100644 --- a/src/institucion-infraccion/institucion-infraccion.controller.ts +++ b/src/institucion-infraccion/institucion-infraccion.controller.ts @@ -1,7 +1,7 @@ import { Body, - ConflictException, Controller, + ForbiddenException, Get, Post, Put, @@ -45,7 +45,7 @@ export class InstitucionInfraccionController { const superAdmin: Operador = req.user.operador; if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.institucionInfraccionService.create(body.infraccion); @@ -56,7 +56,13 @@ export class InstitucionInfraccionController { @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que retorna todas las infracciones.' }) @ApiBearerAuth('jwt') - get() { + get(@Request() req) { + const superAdmin: Operador = req.user.operador; + + if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.institucionInfraccionService.findAll(); } @@ -72,7 +78,17 @@ export class InstitucionInfraccionController { name: 'id_institucion', type: 'string', }) - infracciones(@Query() query: IdInstitucionDto) { + infracciones(@Request() req, @Query() query: IdInstitucionDto) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.institucionInfraccionService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -94,7 +110,7 @@ export class InstitucionInfraccionController { const admin: Operador = req.user.operador; if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.institucionInfraccionService.update(admin, body); diff --git a/src/institucion-programa/institucion-programa.controller.ts b/src/institucion-programa/institucion-programa.controller.ts index 94fa752..9f73c8c 100644 --- a/src/institucion-programa/institucion-programa.controller.ts +++ b/src/institucion-programa/institucion-programa.controller.ts @@ -1,6 +1,6 @@ import { Body, - ConflictException, + ForbiddenException, Controller, Get, Post, @@ -20,6 +20,7 @@ import { import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionProgramaService } from './institucion-programa.service'; import { Operador } from 'src/operador/entity/operador.entity'; +import { Usuario } from 'src/usuario/entity/usuario.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { CreateProgramaDto } from './dto/input/create.dto'; import { UpdateProgramaDto } from './dto/input/update.dto'; @@ -44,7 +45,7 @@ export class InstitucionProgramaController { const superAdmin: Operador = req.user.operador; if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.institucionProgramaService.create(body.programa); @@ -55,7 +56,18 @@ export class InstitucionProgramaController { @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que retorna todos los programas.' }) @ApiBearerAuth('jwt') - get() { + get(@Request() req) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 2 && + operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para realizar esta acción.', + ); return this.institucionProgramaService.findAllProgramas(); } @@ -71,7 +83,13 @@ export class InstitucionProgramaController { name: 'id_institucion', type: 'string', }) - programas(@Query() query: IdInstitucionDto) { + programas(@Request() req, @Query() query: IdInstitucionDto) { + const admin: Operador = req.user.operador; + + if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.institucionProgramaService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -90,7 +108,13 @@ export class InstitucionProgramaController { name: 'id_institucion', type: 'string', }) - programasMostrar(@Query() query: IdInstitucionDto) { + programasMostrar(@Request() req, @Query() query: IdInstitucionDto) { + const usuario: Usuario = req.user.usuario; + + if (!usuario) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.institucionProgramaService.findAllByIdInstitucion( parseInt(query.id_institucion), true, @@ -114,7 +138,7 @@ export class InstitucionProgramaController { const admin: Operador = req.user.operador; if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.institucionProgramaService.update(admin, body); diff --git a/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts b/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts index bda023b..15a39f5 100644 --- a/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts +++ b/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts @@ -1,7 +1,7 @@ import { Body, - ConflictException, Controller, + ForbiddenException, Get, Post, Put, @@ -20,6 +20,7 @@ import { import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionTipoCarritoService } from './institucion-tipo-carrito.service'; import { Operador } from 'src/operador/entity/operador.entity'; +import { Usuario } from 'src/usuario/entity/usuario.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { CreateInstitucionTipoCarritoDto } from './dto/input/create.dto'; import { UpdateInstitucionTipoCarritoDto } from './dto/input/update.dto'; @@ -46,7 +47,7 @@ export class InstitucionTipoCarritoController { const superAdmin: Operador = req.user.operador; if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.institucionTipoCarritoService.create( @@ -62,7 +63,18 @@ export class InstitucionTipoCarritoController { description: 'Endpoint que retorna todos los tipos de carrito.', }) @ApiBearerAuth('jwt') - get() { + get(@Request() req) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 2 && + operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para realizar esta acción.', + ); return this.institucionTipoCarritoService.findAll(); } @@ -79,7 +91,13 @@ export class InstitucionTipoCarritoController { name: 'id_institucion', type: 'string', }) - tiposCarrito(@Query() query: IdInstitucionDto) { + tiposCarrito(@Request() req, @Query() query: IdInstitucionDto) { + const admin: Operador = req.user.operador; + + if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.institucionTipoCarritoService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -98,7 +116,13 @@ export class InstitucionTipoCarritoController { name: 'id_institucion', type: 'string', }) - tiposCarritoMostrar(@Query() query: IdInstitucionDto) { + tiposCarritoMostrar(@Request() req, @Query() query: IdInstitucionDto) { + const usuario: Usuario = req.user.usuario; + + if (!usuario) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.institucionTipoCarritoService.findAllByIdInstitucion( parseInt(query.id_institucion), true, @@ -122,7 +146,7 @@ export class InstitucionTipoCarritoController { const admin: Operador = req.user.operador; if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.institucionTipoCarritoService.update(admin, body); diff --git a/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts b/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts index 9e8c734..c9225b3 100644 --- a/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts +++ b/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts @@ -1,7 +1,7 @@ import { Body, - ConflictException, Controller, + ForbiddenException, Get, Post, Put, @@ -20,6 +20,7 @@ import { import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionTipoEntradaService } from './institucion-tipo-entrada.service'; import { Operador } from 'src/operador/entity/operador.entity'; +import { Usuario } from 'src/usuario/entity/usuario.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { CreateInstitucionTipoEntradaDto } from './dto/input/create.dto'; import { UpdateInstitucionTipoEntradaDto } from './dto/input/update.dto'; @@ -44,7 +45,7 @@ export class InstitucionTipoEntradaController { const superAdmin: Operador = req.user.operador; if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.tipoEntradaService.create(body.tipo_entrada); @@ -57,7 +58,18 @@ export class InstitucionTipoEntradaController { description: 'Endpoint que retorna todos los tipos de entrada.', }) @ApiBearerAuth('jwt') - get() { + get(@Request() req) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 2 && + operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para realizar esta acción.', + ); return this.tipoEntradaService.findAll(); } @@ -74,7 +86,13 @@ export class InstitucionTipoEntradaController { name: 'id_institucion', type: 'string', }) - tiposEntrada(@Query() query: IdInstitucionDto) { + tiposEntrada(@Request() req, @Query() query: IdInstitucionDto) { + const admin: Operador = req.user.operador; + + if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.tipoEntradaService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -93,7 +111,13 @@ export class InstitucionTipoEntradaController { name: 'id_institucion', type: 'string', }) - tipoEntradaMostrar(@Query() query: IdInstitucionDto) { + tipoEntradaMostrar(@Request() req, @Query() query: IdInstitucionDto) { + const usuario: Usuario = req.user.usuario; + + if (!usuario) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.tipoEntradaService.findAllByIdInstitucion( parseInt(query.id_institucion), true, @@ -117,7 +141,7 @@ export class InstitucionTipoEntradaController { const admin: Operador = req.user.operador; if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.tipoEntradaService.update(admin, body); diff --git a/src/institucion/institucion.controller.ts b/src/institucion/institucion.controller.ts index ec0a7ce..f966c57 100644 --- a/src/institucion/institucion.controller.ts +++ b/src/institucion/institucion.controller.ts @@ -1,7 +1,7 @@ import { Body, - ConflictException, Controller, + ForbiddenException, Get, Put, Query, @@ -47,7 +47,13 @@ export class InstitucionController { description: 'Endpoint que retorna todas las instituciones.', }) @ApiBearerAuth('jwt') - get() { + get(@Request() req) { + const superAdmin: Operador = req.user.operador; + + if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 3) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.institucionService.findAll(); } @@ -71,10 +77,21 @@ export class InstitucionController { (admin.tipoUsuario.id_tipo_usuario != 2 && admin.tipoUsuario.id_tipo_usuario != 3) ) - throw new ConflictException( - 'No tienes permiso para acceder a esta información.', + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', ); - return this.institucionService.findById(parseInt(query.id_institucion)); + return this.institucionService + .findById(parseInt(query.id_institucion)) + .then((institucion) => { + if ( + admin.tipoUsuario.id_tipo_usuario === 3 && + admin.institucion.id_institucion != institucion.id_institucion + ) + throw new ForbiddenException( + 'No puedes acceder a esta información porque no perteneces a esta institución.', + ); + return institucion; + }); } @Serealize(InstitucionesOutputDto) @@ -84,7 +101,13 @@ export class InstitucionController { description: 'Endpoint que retorna todas las instituciones.', }) @ApiBearerAuth('jwt') - instituciones() { + instituciones(@Request() req) { + const superAdmin: Operador = req.user.operador; + + if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.institucionService.findAll(); } @@ -123,7 +146,7 @@ export class InstitucionController { (admin.tipoUsuario.id_tipo_usuario != 2 && admin.tipoUsuario.id_tipo_usuario != 3) ) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.institucionService.update(admin, body); diff --git a/src/marca/marca.controller.ts b/src/marca/marca.controller.ts index eede482..c67778c 100644 --- a/src/marca/marca.controller.ts +++ b/src/marca/marca.controller.ts @@ -1,7 +1,7 @@ import { Body, - ConflictException, Controller, + ForbiddenException, Get, Post, Query, @@ -40,7 +40,7 @@ export class MarcaController { const superAdmin: Operador = req.user.operador; if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.marcaService.create(body.marca, body.tipo); @@ -56,7 +56,18 @@ export class MarcaController { name: 'tipo', type: 'text', }) - get(@Query() query: MarcaDto) { + get(@Request() req, @Query() query: MarcaDto) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 2 && + operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.marcaService.findAll(query.tipo); } } diff --git a/src/modelo/modelo.controller.ts b/src/modelo/modelo.controller.ts index d0d19e4..92d6c1d 100644 --- a/src/modelo/modelo.controller.ts +++ b/src/modelo/modelo.controller.ts @@ -1,7 +1,7 @@ import { Body, - ConflictException, Controller, + ForbiddenException, Get, Post, Query, @@ -40,7 +40,7 @@ export class ModeloController { const superAdmin: Operador = req.user.operador; if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.modeloService.create(body.modelo, body.tipo); @@ -56,7 +56,18 @@ export class ModeloController { name: 'tipo', type: 'text', }) - get(@Query() query: ModeloDto) { + get(@Request() req, @Query() query: ModeloDto) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 2 && + operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para accedar a esta información.', + ); return this.modeloService.findAll(query.tipo); } } diff --git a/src/modulo/modulo.controller.ts b/src/modulo/modulo.controller.ts index 9f7c6b5..5b04122 100644 --- a/src/modulo/modulo.controller.ts +++ b/src/modulo/modulo.controller.ts @@ -1,7 +1,7 @@ import { Body, - ConflictException, Controller, + ForbiddenException, Get, Post, Put, @@ -20,6 +20,7 @@ import { import { Serealize } from '../interceptors/serialize.interceptor'; import { ModuloService } from './modulo.service'; import { Operador } from 'src/operador/entity/operador.entity'; +import { Usuario } from 'src/usuario/entity/usuario.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { CreateModuloDto } from './dto/input/create.dto'; import { ModuloDto } from './dto/input/modulo.dto'; @@ -44,7 +45,7 @@ export class ModuloController { const admin: Operador = req.user.operador; if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.moduloService.create(admin, body.modulo); @@ -62,21 +63,40 @@ export class ModuloController { name: 'id_modulo', type: 'string', }) - modulo(@Query() query: ModuloDto) { + modulo(@Request() req, @Query() query: ModuloDto) { + const admin: Operador = req.user.operador; + + if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.moduloService.findById(parseInt(query.id_modulo)); } @Serealize(ModuloOutputDto) @Get('modulos') + @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que retorna todos los módulos de una institución.', }) + @ApiBearerAuth('jwt') @ApiQuery({ description: 'Id de la institución.', name: 'id_institucion', type: 'string', }) - modulos(@Query() query: IdInstitucionDto) { + modulos(@Request() req, @Query() query: IdInstitucionDto) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 2 && + operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.moduloService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -84,11 +104,9 @@ export class ModuloController { @Serealize(ModuloMinOutputDto) @Get('modulos-activos') - @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que retorna todos los módulos de una institución.', }) - @ApiBearerAuth('jwt') @ApiQuery({ description: 'Id de la institución.', name: 'id_institucion', @@ -117,7 +135,7 @@ export class ModuloController { const admin: Operador = req.user.operador; if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.moduloService.update(admin, body); diff --git a/src/motivo/motivo.controller.ts b/src/motivo/motivo.controller.ts index bfbacb3..872e111 100644 --- a/src/motivo/motivo.controller.ts +++ b/src/motivo/motivo.controller.ts @@ -1,4 +1,11 @@ -import { Controller, Get, Query, UseGuards } from '@nestjs/common'; +import { + Controller, + ForbiddenException, + Get, + Query, + Request, + UseGuards, +} from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, @@ -8,6 +15,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { MotivoService } from './motivo.service'; +import { Operador } from 'src/operador/entity/operador.entity'; import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto'; import { MotivoOutputDto } from './dto/output/motivo.dto'; @@ -34,7 +42,17 @@ export class MotivoController { name: 'pagina', type: 'string', }) - get(@Query() query: IdEquipoPaginaDto) { + get(@Request() req, @Query() query: IdEquipoPaginaDto) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.motivoService.findAllByIdEquipo( parseInt(query.id_equipo), parseInt(query.pagina), diff --git a/src/multa/multa.controller.ts b/src/multa/multa.controller.ts index c1f71d9..c003510 100644 --- a/src/multa/multa.controller.ts +++ b/src/multa/multa.controller.ts @@ -1,7 +1,7 @@ import { Body, - ConflictException, Controller, + ForbiddenException, Get, Post, Put, @@ -20,6 +20,7 @@ import { import { Serealize } from '../interceptors/serialize.interceptor'; import { MultaService } from './multa.service'; import { Operador } from 'src/operador/entity/operador.entity'; +import { Usuario } from 'src/usuario/entity/usuario.entity'; import { IdUsuarioDto } from '../dto/id-usuario.dto'; import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto'; import { MultarDto } from './dto/input/multar.dto'; @@ -61,7 +62,7 @@ export class MultaController { (operador.tipoUsuario.id_tipo_usuario != 3 && operador.tipoUsuario.id_tipo_usuario != 4) ) - throw new ConflictException( + throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', ); return this.multaService.create( @@ -98,7 +99,18 @@ export class MultaController { type: 'string', required: false, }) - multas(@Query() query: MultasDto) { + multas(@Request() req, @Query() query: MultasDto) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 2 && + operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.multaService.findAll(query); } @@ -119,7 +131,17 @@ export class MultaController { name: 'pagina', type: 'string', }) - multasEquipo(@Query() query: IdEquipoPaginaDto) { + multasEquipo(@Request() req, @Query() query: IdEquipoPaginaDto) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.multaService.findAllByIdEquipo( parseInt(query.id_equipo), parseInt(query.pagina), @@ -143,7 +165,18 @@ export class MultaController { name: 'pagina', type: 'string', }) - multasUsuario(@Query() query: IdUsuarioPaginaDto) { + multasUsuario(@Request() req, @Query() query: IdUsuarioPaginaDto) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 2 && + operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.multaService.findAllByIdUsuario( parseInt(query.id_usuario), parseInt(query.pagina), @@ -163,7 +196,13 @@ export class MultaController { name: 'id_usuario', type: 'string', }) - multasActivas(@Query() query: IdUsuarioDto) { + multasActivas(@Request() req, @Query() query: IdUsuarioDto) { + const usuario: Usuario = req.user.usuario; + + if (!usuario) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.multaService.findMultasActivas(parseInt(query.id_usuario)); } @@ -178,7 +217,13 @@ export class MultaController { description: 'La variable id_institucion_usuario es obligatoria.', examples: { example: { value: { id_institucion_usuario: 1 } } }, }) - quitarMulta(@Body() body: QuitarMultarDto) { + quitarMulta(@Request() req, @Body() body: QuitarMultarDto) { + const admin: Operador = req.user.operador; + + if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.multaService.quitarMulta(body.id_institucion_usuario); } diff --git a/src/status/status.controller.ts b/src/status/status.controller.ts index ca42f83..b13670b 100644 --- a/src/status/status.controller.ts +++ b/src/status/status.controller.ts @@ -1,9 +1,16 @@ -import { Controller, Get, UseGuards } from '@nestjs/common'; +import { + Controller, + ForbiddenException, + Get, + Request, + UseGuards, +} from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { StatusService } from './status.service'; import { StatusOutputDto } from './dto/output/status.dto'; +import { Operador } from 'src/operador/entity/operador.entity'; @Controller('status') @ApiTags('status') @@ -15,7 +22,18 @@ export class StatusController { @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que retorna todos los status.' }) @ApiBearerAuth('jwt') - get() { + get(@Request() req) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 2 && + operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); return this.statusService.findAll(); } } diff --git a/src/tipo-usuario/tipo-usuario.controller.ts b/src/tipo-usuario/tipo-usuario.controller.ts index dc078ee..13cb14f 100644 --- a/src/tipo-usuario/tipo-usuario.controller.ts +++ b/src/tipo-usuario/tipo-usuario.controller.ts @@ -45,7 +45,13 @@ export class TipoUsuarioController { description: 'Endpoint que retorna todos los tipos de usuario.', }) @ApiBearerAuth('jwt') - get() { + get(@Request() req) { + const superAdmin: Operador = req.user.operador; + + if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) + throw new ConflictException( + 'No tienes los permisos necesarios para realizar esta acción.', + ); return this.tipoUsuarioService.findAll(); } @@ -57,7 +63,18 @@ export class TipoUsuarioController { 'Endpoint que retorna todos los tipos de usuario que debe ver un operador.', }) @ApiBearerAuth('jwt') - operador() { + operador(@Request() req) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 2 && + operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ConflictException( + 'No tienes los permisos necesarios para realizar esta acción.', + ); return this.tipoUsuarioService.findAll('operador'); } }