diff --git a/src/app.module.ts b/src/app.module.ts index bfd8767..3b79de4 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -75,6 +75,7 @@ import { InformacionEquipoProgramaView } from './equipo-programa/entity/views/in import { InformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view'; import { InformacionOperadorView } from './operador/entity/views/informacion-operador.view'; import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuario.view'; +import { ValidarUsuarioModule } from './validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -173,6 +174,7 @@ import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuar TipoUsuarioModule, UploadFileModule, UsuarioModule, + ValidarUsuarioModule, ], }) export class AppModule {} diff --git a/src/auth/strategy/jwt-strategy.service.ts b/src/auth/strategy/jwt-strategy.service.ts index f89b339..003e6c9 100644 --- a/src/auth/strategy/jwt-strategy.service.ts +++ b/src/auth/strategy/jwt-strategy.service.ts @@ -39,16 +39,16 @@ export class JwtStrategyService extends PassportStrategy(Strategy) { if (!operador.activo) throw new ForbiddenException('Esta cuenta esta desactivada.'); /* - if (operador.tipoUsuario.id_tipo_usuario === 4) { - if (payload.id_modulo) + if (operador.tipoUsuario.id_tipo_usuario === 4) { + if (payload.id_modulo) await this.moduloService - .findById(payload.id_modulo) - .then((modulo) => (user.modulo = modulo)); - else + .findById(payload.id_modulo) + .then((modulo) => (user.modulo = modulo)); + else throw new ForbiddenException( 'Credenciales no válidas, inicia sesión de nuevo.', - ); - } + ); + } */ user.operador = operador; }); diff --git a/src/carrera-programa/carrera-programa.controller.ts b/src/carrera-programa/carrera-programa.controller.ts index 3ed6a6a..6eb756c 100644 --- a/src/carrera-programa/carrera-programa.controller.ts +++ b/src/carrera-programa/carrera-programa.controller.ts @@ -1,6 +1,5 @@ import { Body, - ForbiddenException, Controller, Delete, Get, @@ -19,17 +18,21 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { CarreraProgramaService } from './carrera-programa.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; +import { Usuario } from '../usuario/entity/usuario.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { CreateCarreraProgramaDto } from './dto/input/create.dto'; import { DeleteCarreraProgramaDto } from './dto/input/delete.dto'; import { CarreraProgramaOutputDto } from './dto/output/carrera-programa.dto'; -import { Usuario } from '../usuario/entity/usuario.entity'; @Controller('carrera-programa') @ApiTags('carrera-programa') export class CarreraProgramaController { - constructor(private carreraProgramaService: CarreraProgramaService) {} + constructor( + private carreraProgramaService: CarreraProgramaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -47,10 +50,7 @@ export class CarreraProgramaController { create(@Request() req, @Body() body: CreateCarreraProgramaDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.carreraProgramaService.create( admin, body.id_institucion_carrera, @@ -72,10 +72,7 @@ export class CarreraProgramaController { delete(@Request() req, @Body() body: DeleteCarreraProgramaDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.carreraProgramaService.delete(admin, body.id_carrera_programa); } @@ -96,14 +93,9 @@ export class CarreraProgramaController { const usuarioOperador: Operador | Usuario = req.user.operador || req.user.usuario; - if ( - !usuarioOperador || - (usuarioOperador.tipoUsuario.id_tipo_usuario != 3 && - usuarioOperador.tipoUsuario.id_tipo_usuario < 5) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + if ('id_usuario' in usuarioOperador) + this.validarUsuarioService.validarUsuario(usuarioOperador); + else this.validarUsuarioService.validarAdmin(usuarioOperador); return this.carreraProgramaService.findByIdInstitucion( usuarioOperador, parseInt(query.id_institucion), diff --git a/src/carrera-programa/carrera-programa.module.ts b/src/carrera-programa/carrera-programa.module.ts index 68aea8c..85ad715 100644 --- a/src/carrera-programa/carrera-programa.module.ts +++ b/src/carrera-programa/carrera-programa.module.ts @@ -7,6 +7,7 @@ import { CarreraPrograma } from './entity/carrera-programa.entity'; import { InstitucionModule } from '../institucion/institucion.module'; import { InstitucionCarreraModule } from '../institucion-carrera/institucion-carrera.module'; import { InstitucionProgramaModule } from '../institucion-programa/institucion-programa.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -15,6 +16,7 @@ import { InstitucionProgramaModule } from '../institucion-programa/institucion-p InstitucionProgramaModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([CarreraPrograma]), + ValidarUsuarioModule, ], controllers: [CarreraProgramaController], providers: [CarreraProgramaService], diff --git a/src/carrito-motivo/carrito-motivo.controller.ts b/src/carrito-motivo/carrito-motivo.controller.ts index 6041383..4236a6d 100644 --- a/src/carrito-motivo/carrito-motivo.controller.ts +++ b/src/carrito-motivo/carrito-motivo.controller.ts @@ -1,11 +1,4 @@ -import { - Controller, - ForbiddenException, - Get, - Query, - Request, - UseGuards, -} from '@nestjs/common'; +import { Controller, Get, Query, Request, UseGuards } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, @@ -14,7 +7,8 @@ import { ApiTags, } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; -import { CaritoMotivoService } from './carrito-motivo.service'; +import { CarritoMotivoService } from './carrito-motivo.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { GetDto } from './dto/input/get.dto'; import { CarritoMotivoOutputDto } from './dto/output/carrito-motivo.dto'; @@ -22,7 +16,10 @@ import { CarritoMotivoOutputDto } from './dto/output/carrito-motivo.dto'; @Controller('carrito-motivo') @ApiTags('carrito-motivo') export class CarritoMotivoController { - constructor(private carritoMotivoService: CaritoMotivoService) {} + constructor( + private carritoMotivoService: CarritoMotivoService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(CarritoMotivoOutputDto) @Get() @@ -45,14 +42,7 @@ export class CarritoMotivoController { get(@Request() req, @Query() query: GetDto) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.carritoMotivoService.findAllByIdCarrito( parseInt(query.id_carrito), parseInt(query.pagina), diff --git a/src/carrito-motivo/carrito-motivo.module.ts b/src/carrito-motivo/carrito-motivo.module.ts index 420ca39..eec07a6 100644 --- a/src/carrito-motivo/carrito-motivo.module.ts +++ b/src/carrito-motivo/carrito-motivo.module.ts @@ -2,11 +2,12 @@ import { forwardRef, Module } from '@nestjs/common'; import { PassportModule } from '@nestjs/passport'; import { TypeOrmModule } from '@nestjs/typeorm'; import { CarritoMotivoController } from './carrito-motivo.controller'; -import { CaritoMotivoService } from './carrito-motivo.service'; +import { CarritoMotivoService } from './carrito-motivo.service'; import { CarritoMotivo } from './entity/carrito-motivo.entity'; import { CarritoModule } from '../carrito/carrito.module'; import { OperadorModule } from '../operador/operador.module'; import { StatusModule } from '../status/status.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -15,9 +16,10 @@ import { StatusModule } from '../status/status.module'; StatusModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([CarritoMotivo]), + ValidarUsuarioModule, ], controllers: [CarritoMotivoController], - providers: [CaritoMotivoService], - exports: [CaritoMotivoService], + providers: [CarritoMotivoService], + exports: [CarritoMotivoService], }) export class CarritoMotivoModule {} diff --git a/src/carrito-motivo/carrito-motivo.service.ts b/src/carrito-motivo/carrito-motivo.service.ts index a626474..3c32f2d 100644 --- a/src/carrito-motivo/carrito-motivo.service.ts +++ b/src/carrito-motivo/carrito-motivo.service.ts @@ -9,7 +9,7 @@ import { CarritoService } from '../carrito/carrito.service'; import { OperadorService } from '../operador/operador.service'; @Injectable() -export class CaritoMotivoService { +export class CarritoMotivoService { constructor( @InjectRepository(CarritoMotivo) private repository: Repository, diff --git a/src/carrito/carrito.controller.ts b/src/carrito/carrito.controller.ts index 566a85e..0a540f1 100644 --- a/src/carrito/carrito.controller.ts +++ b/src/carrito/carrito.controller.ts @@ -20,6 +20,7 @@ import { import { Operador } from '../operador/entity/operador.entity'; import { Serealize } from '../interceptors/serialize.interceptor'; import { CarritoService } from './carrito.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { CarritoDto } from './dto/input/carrito.dto'; import { CarritosDto } from './dto/input/carritos.dto'; import { CreateCarritoDto } from './dto/input/create.dto'; @@ -30,7 +31,10 @@ import { CarritosOutputDto } from './dto/output/carritos.dto'; @Controller('carrito') @ApiTags('carrito') export class CarritoController { - constructor(private carritoService: CarritoService) {} + constructor( + private carritoService: CarritoService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(CarritoOutputDto) @Get('carrito') @@ -47,14 +51,7 @@ export class CarritoController { carrito(@Request() req, @Query() query: CarritoDto) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.carritoService .findById(parseInt(query.id_carrito)) .then((carrito) => { @@ -128,14 +125,7 @@ export class CarritoController { carritos(@Request() req, @Query() query: CarritosDto) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.carritoService.findAll(operador, query); } @@ -156,10 +146,7 @@ export class CarritoController { create(@Request() req, @Body() body: CreateCarritoDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.carritoService.create( admin, body.id_modulo, @@ -191,14 +178,7 @@ export class CarritoController { const data = { ...body }; 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); delete data.motivo; return this.carritoService.update(operador, data, body.motivo); } diff --git a/src/carrito/carrito.module.ts b/src/carrito/carrito.module.ts index 3a983e8..c2431c4 100644 --- a/src/carrito/carrito.module.ts +++ b/src/carrito/carrito.module.ts @@ -10,6 +10,7 @@ import { InstitucionTipoCarritoModule } from '../institucion-tipo-carrito/instit import { MarcaModule } from '../marca/marca.module'; import { ModeloModule } from '../modelo/modelo.module'; import { ModuloModule } from '../modulo/modulo.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -21,6 +22,7 @@ import { ModuloModule } from '../modulo/modulo.module'; ModuloModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Carrito]), + ValidarUsuarioModule, ], controllers: [CarritoController], providers: [CarritoService], diff --git a/src/carrito/carrito.service.ts b/src/carrito/carrito.service.ts index fc97f6e..024c3b4 100644 --- a/src/carrito/carrito.service.ts +++ b/src/carrito/carrito.service.ts @@ -12,7 +12,7 @@ import { Carrito } from './entity/carrito.entity'; import { Modulo } from '../modulo/entity/modulo.entity'; import { Operador } from '../operador/entity/operador.entity'; import { TipoCarrito } from '../institucion-tipo-carrito/entity/tipo-carrito.entity'; -import { CaritoMotivoService } from '../carrito-motivo/carrito-motivo.service'; +import { CarritoMotivoService } from '../carrito-motivo/carrito-motivo.service'; import { InstitucionService } from '../institucion/institucion.service'; import { InstitucionTipoCarritoService } from '../institucion-tipo-carrito/institucion-tipo-carrito.service'; import { MarcaService } from '../marca/marca.service'; @@ -23,8 +23,8 @@ import { ModuloService } from '../modulo/modulo.service'; export class CarritoService { constructor( @InjectRepository(Carrito) private repository: Repository, - @Inject(forwardRef(() => CaritoMotivoService)) - private caritoMotivoService: CaritoMotivoService, + @Inject(forwardRef(() => CarritoMotivoService)) + private caritoMotivoService: CarritoMotivoService, private institucionService: InstitucionService, private institucionTipoCarritoService: InstitucionTipoCarritoService, private marcaService: MarcaService, diff --git a/src/equipo-motivo/equipo-motivo.controller.ts b/src/equipo-motivo/equipo-motivo.controller.ts index 80ef4d7..c6078e3 100644 --- a/src/equipo-motivo/equipo-motivo.controller.ts +++ b/src/equipo-motivo/equipo-motivo.controller.ts @@ -1,11 +1,4 @@ -import { - Controller, - ForbiddenException, - Get, - Query, - Request, - UseGuards, -} from '@nestjs/common'; +import { Controller, Get, Query, Request, UseGuards } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, @@ -15,6 +8,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { EquipoMotivoService } from './equipo-motivo.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto'; import { EquipoMotivoOutputDto } from './dto/output/equipo-motivo.dto'; @@ -22,7 +16,10 @@ import { EquipoMotivoOutputDto } from './dto/output/equipo-motivo.dto'; @Controller('equipo-motivo') @ApiTags('equipo-motivo') export class EquipoMotivoController { - constructor(private equipoMotivoService: EquipoMotivoService) {} + constructor( + private equipoMotivoService: EquipoMotivoService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(EquipoMotivoOutputDto) @Get() @@ -45,14 +42,7 @@ export class EquipoMotivoController { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoMotivoService.findAllByIdEquipo( parseInt(query.id_equipo), parseInt(query.pagina), diff --git a/src/equipo-motivo/equipo-motivo.module.ts b/src/equipo-motivo/equipo-motivo.module.ts index 99a3b19..4360db4 100644 --- a/src/equipo-motivo/equipo-motivo.module.ts +++ b/src/equipo-motivo/equipo-motivo.module.ts @@ -7,6 +7,7 @@ import { EquipoMotivo } from './entity/equipo-motivo.entity'; import { EquipoModule } from '../equipo/equipo.module'; import { OperadorModule } from '../operador/operador.module'; import { StatusModule } from '../status/status.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -15,6 +16,7 @@ import { StatusModule } from '../status/status.module'; StatusModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([EquipoMotivo]), + ValidarUsuarioModule, ], controllers: [EquipoMotivoController], providers: [EquipoMotivoService], diff --git a/src/equipo-programa/equipo-programa.controller.ts b/src/equipo-programa/equipo-programa.controller.ts index 5a09431..846c18d 100644 --- a/src/equipo-programa/equipo-programa.controller.ts +++ b/src/equipo-programa/equipo-programa.controller.ts @@ -2,7 +2,6 @@ import { Body, Controller, Delete, - ForbiddenException, Post, Request, UseGuards, @@ -11,13 +10,17 @@ import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger'; import { Operador } from '../operador/entity/operador.entity'; import { EquipoProgramaService } from './equipo-programa.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { CreateEquipoProgramaDto } from './dto/input/create.dto'; import { DeleteEquipoProgramaDto } from './dto/input/delete.dto'; @Controller('equipo-programa') @ApiTags('equipo-programa') export class EquipoProgramaController { - constructor(private equipoProgramaService: EquipoProgramaService) {} + constructor( + private equipoProgramaService: EquipoProgramaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -33,14 +36,7 @@ export class EquipoProgramaController { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoProgramaService.create(body.id_equipo, body.id_programa); } @@ -58,14 +54,7 @@ export class EquipoProgramaController { delete(@Request() req, @Body() body: DeleteEquipoProgramaDto) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoProgramaService.delete(operador, body.id_equipo_programa); } } diff --git a/src/equipo-programa/equipo-programa.module.ts b/src/equipo-programa/equipo-programa.module.ts index 520b53a..dba6fe5 100644 --- a/src/equipo-programa/equipo-programa.module.ts +++ b/src/equipo-programa/equipo-programa.module.ts @@ -7,6 +7,7 @@ import { EquipoPrograma } from '../equipo-programa/entity/equipo-programa.entity import { InformacionEquipoProgramaView } from './entity/views/informacion-equipo-programa.view'; import { EquipoModule } from '../equipo/equipo.module'; import { InstitucionProgramaModule } from '../institucion-programa/institucion-programa.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -14,6 +15,7 @@ import { InstitucionProgramaModule } from '../institucion-programa/institucion-p InstitucionProgramaModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([EquipoPrograma, InformacionEquipoProgramaView]), + ValidarUsuarioModule, ], controllers: [EquipoProgramaController], providers: [EquipoProgramaService], diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts index e6d23f1..4a5bdcc 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts @@ -2,7 +2,6 @@ import { Body, Controller, Delete, - ForbiddenException, Post, Request, UseGuards, @@ -10,6 +9,7 @@ import { import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger'; import { EquipoTipoEntradaService } from './equipo-tipo-entrada.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { CreateEquipoTipoEntradaDto } from './dto/input/create.dto'; import { DeleteEquipoTipoEntradaDto } from './dto/input/delete.dto'; @@ -17,7 +17,10 @@ import { DeleteEquipoTipoEntradaDto } from './dto/input/delete.dto'; @Controller('equipo-tipo-entrada') @ApiTags('equipo-tipo-entrada') export class EquipoTipoEntradaController { - constructor(private equipoTipoEntradaService: EquipoTipoEntradaService) {} + constructor( + private equipoTipoEntradaService: EquipoTipoEntradaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -33,14 +36,7 @@ export class EquipoTipoEntradaController { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoTipoEntradaService.create( body.id_equipo, body.id_tipo_entrada, @@ -61,14 +57,7 @@ export class EquipoTipoEntradaController { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoTipoEntradaService.delete(body.id_equipo_tipo_entrada); } } diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts index 2cca286..95311ad 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts @@ -7,6 +7,7 @@ import { EquipoTipoEntrada } from '../equipo-tipo-entrada/entity/equipo-tipo-ent import { InformacionEquipoTipoEntradaView } from './entity/views/informacion-equipo-tipo-entrada.view'; import { EquipoModule } from '../equipo/equipo.module'; import { InstitucionTipoEntradaModule } from '../institucion-tipo-entrada/institucion-tipo-entrada.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -17,6 +18,7 @@ import { InstitucionTipoEntradaModule } from '../institucion-tipo-entrada/instit EquipoTipoEntrada, InformacionEquipoTipoEntradaView, ]), + ValidarUsuarioModule, ], controllers: [EquipoTipoEntradaController], providers: [EquipoTipoEntradaService], diff --git a/src/equipo/equipo.controller.ts b/src/equipo/equipo.controller.ts index af60498..4a3accf 100644 --- a/src/equipo/equipo.controller.ts +++ b/src/equipo/equipo.controller.ts @@ -18,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { EquipoService } from './equipo.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { NumeroInventarioDto } from '../dto/numero-inventario.dto'; import { EquiposDto } from './dto/input/equipos.dto'; @@ -28,7 +29,10 @@ import { EquiposOutputDto } from './dto/output/equipos.dto'; @Controller('equipo') @ApiTags('equipo') export class EquipoController { - constructor(private equipoService: EquipoService) {} + constructor( + private equipoService: EquipoService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(EquipoOutputDto) @Get('equipo') @@ -51,14 +55,7 @@ export class EquipoController { equipo(@Request() req, @Query() query: NumeroInventarioDto) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoService .findByNumeroInventario( parseInt(query.id_institucion), @@ -159,14 +156,7 @@ export class EquipoController { equipos(@Request() req, @Query() query: EquiposDto) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoService.findAll(operador, query); } @@ -196,14 +186,7 @@ export class EquipoController { const operador: Operador = req.user.operador; const data = { ...body }; - 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); delete data.id_carrito; delete data.id_status; delete data.id_operador; diff --git a/src/equipo/equipo.module.ts b/src/equipo/equipo.module.ts index 6f59bd5..00af674 100644 --- a/src/equipo/equipo.module.ts +++ b/src/equipo/equipo.module.ts @@ -17,6 +17,7 @@ import { ModuloModule } from '../modulo/modulo.module'; import { EquipoMotivoModule } from '../equipo-motivo/equipo-motivo.module'; import { OperadorModule } from '../operador/operador.module'; import { StatusModule } from '../status/status.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -34,6 +35,7 @@ import { StatusModule } from '../status/status.module'; PassportModule.register({ defaultStrategy: 'jwt' }), StatusModule, TypeOrmModule.forFeature([Equipo, InformacionEquipoView]), + ValidarUsuarioModule, ], controllers: [EquipoController], providers: [EquipoService], diff --git a/src/hora-excepcion/hora-excepcion.controller.ts b/src/hora-excepcion/hora-excepcion.controller.ts index 2013319..cd510c9 100644 --- a/src/hora-excepcion/hora-excepcion.controller.ts +++ b/src/hora-excepcion/hora-excepcion.controller.ts @@ -2,7 +2,6 @@ import { Body, Controller, Delete, - ForbiddenException, Get, Post, Query, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { HoraExcepcionService } from './hora-excepcion.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { CreateHoraExcepcionDto } from './dto/input/create.dto'; import { DeleteHoraExcepcionDto } from './dto/input/delete.dto'; @@ -28,7 +28,10 @@ import { HoraExcepcionOutputDto } from './dto/output/hora-excepcion.dto'; @Controller('hora-excepcion') @ApiTags('hora-excepcion') export class HoraExcepcionController { - constructor(private horaExcepcionService: HoraExcepcionService) {} + constructor( + private horaExcepcionService: HoraExcepcionService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -51,10 +54,7 @@ export class HoraExcepcionController { create(@Request() req, @Body() body: CreateHoraExcepcionDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.horaExcepcionService.create( admin, body.id_institucion_dia, @@ -76,10 +76,7 @@ export class HoraExcepcionController { delete(@Request() req, @Body() body: DeleteHoraExcepcionDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.horaExcepcionService.delete(admin, body.id_hora_excepcion); } @@ -98,10 +95,7 @@ export class HoraExcepcionController { 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.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.horaExcepcionService.findAllByIdInstitucionDia( parseInt(query.id_institucion_dia), ); diff --git a/src/hora-excepcion/hora-excepcion.module.ts b/src/hora-excepcion/hora-excepcion.module.ts index a1d68e0..4e91f55 100644 --- a/src/hora-excepcion/hora-excepcion.module.ts +++ b/src/hora-excepcion/hora-excepcion.module.ts @@ -5,12 +5,14 @@ import { HoraExcepcionController } from './hora-excepcion.controller'; import { HoraExcepcionService } from './hora-excepcion.service'; import { HoraExcepcion } from './entity/hora-excepcion.entity'; import { InstitucionDiaModule } from '../institucion-dia/institucion-dia.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionDiaModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([HoraExcepcion]), + ValidarUsuarioModule, ], controllers: [HoraExcepcionController], providers: [HoraExcepcionService], diff --git a/src/institucion-dia/institucion-dia.controller.ts b/src/institucion-dia/institucion-dia.controller.ts index 5a2f0b2..1256da1 100644 --- a/src/institucion-dia/institucion-dia.controller.ts +++ b/src/institucion-dia/institucion-dia.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Put, Query, @@ -18,6 +17,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionDiaService } from './institucion-dia.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { UpdateInstitucionDiaDto } from './dto/input/update.dto'; @@ -27,7 +27,10 @@ import { Usuario } from '../usuario/entity/usuario.entity'; @Controller('institucion-dia') @ApiTags('institucion-dia') export class InstitucionDiaController { - constructor(private institucionDiaService: InstitucionDiaService) {} + constructor( + private institucionDiaService: InstitucionDiaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(InstitucionCarreaOutputDto) @Get() @@ -44,10 +47,7 @@ export class InstitucionDiaController { 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.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionDiaService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -69,10 +69,7 @@ export class InstitucionDiaController { 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.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.institucionDiaService.hoy(parseInt(query.id_institucion)); } @@ -102,10 +99,7 @@ export class InstitucionDiaController { update(@Request() req, @Body() body: UpdateInstitucionDiaDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionDiaService.update(admin, body); } } diff --git a/src/institucion-dia/institucion-dia.module.ts b/src/institucion-dia/institucion-dia.module.ts index ba116a9..a2453e2 100644 --- a/src/institucion-dia/institucion-dia.module.ts +++ b/src/institucion-dia/institucion-dia.module.ts @@ -6,12 +6,14 @@ import { InstitucionDiaService } from './institucion-dia.service'; import { Dia } from './entity/dia.entity'; import { InstitucionDia } from './entity/institucion-dia.entity'; import { InstitucionModule } from '../institucion/institucion.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Dia, InstitucionDia]), + ValidarUsuarioModule, ], controllers: [InstitucionDiaController], providers: [InstitucionDiaService], diff --git a/src/institucion-infraccion/institucion-infraccion.controller.ts b/src/institucion-infraccion/institucion-infraccion.controller.ts index 69d182c..0738130 100644 --- a/src/institucion-infraccion/institucion-infraccion.controller.ts +++ b/src/institucion-infraccion/institucion-infraccion.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionInfraccionService } from './institucion-infraccion.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { CreateInstitucionInfraccionDto } from './dto/input/create.dto'; @@ -31,6 +31,7 @@ import { InstitucionInfraccionOutputDto } from './dto/output/institucion-infracc export class InstitucionInfraccionController { constructor( private institucionInfraccionService: InstitucionInfraccionService, + private validarUsuarioService: ValidarUsuarioService, ) {} @Post() @@ -44,10 +45,7 @@ export class InstitucionInfraccionController { create(@Request() req, @Body() body: CreateInstitucionInfraccionDto) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.institucionInfraccionService.create(body.infraccion); } @@ -59,10 +57,7 @@ export class InstitucionInfraccionController { 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.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.institucionInfraccionService.findAll(); } @@ -81,14 +76,7 @@ export class InstitucionInfraccionController { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.institucionInfraccionService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -109,10 +97,7 @@ export class InstitucionInfraccionController { update(@Request() req, @Body() body: UpdateInstitucionInfraccionDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionInfraccionService.update(admin, body); } } diff --git a/src/institucion-infraccion/institucion-infraccion.module.ts b/src/institucion-infraccion/institucion-infraccion.module.ts index 16196cc..531ce63 100644 --- a/src/institucion-infraccion/institucion-infraccion.module.ts +++ b/src/institucion-infraccion/institucion-infraccion.module.ts @@ -6,12 +6,14 @@ import { InstitucionInfraccionService } from './institucion-infraccion.service'; import { Infraccion } from './entity/infraccion.entity'; import { InstitucionInfraccion } from './entity/institucion-infraccion.entity'; import { InstitucionModule } from '../institucion/institucion.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Infraccion, InstitucionInfraccion]), + ValidarUsuarioModule, ], controllers: [InstitucionInfraccionController], providers: [InstitucionInfraccionService], diff --git a/src/institucion-programa/institucion-programa.controller.ts b/src/institucion-programa/institucion-programa.controller.ts index e88571d..4f1ba38 100644 --- a/src/institucion-programa/institucion-programa.controller.ts +++ b/src/institucion-programa/institucion-programa.controller.ts @@ -1,6 +1,5 @@ import { Body, - ForbiddenException, Controller, Get, Post, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionProgramaService } from './institucion-programa.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { Usuario } from '../usuario/entity/usuario.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; @@ -31,7 +31,10 @@ import { ProgramaOutputDto } from './dto/output/programa.dto'; @Controller('institucion-programa') @ApiTags('institucion-programa') export class InstitucionProgramaController { - constructor(private institucionProgramaService: InstitucionProgramaService) {} + constructor( + private institucionProgramaService: InstitucionProgramaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -44,10 +47,7 @@ export class InstitucionProgramaController { create(@Request() req, @Body() body: CreateProgramaDto) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.institucionProgramaService.create(body.programa); } @@ -59,15 +59,7 @@ export class InstitucionProgramaController { 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.', - ); + this.validarUsuarioService.validarOperador(operador); return this.institucionProgramaService.findAllProgramas(); } @@ -86,10 +78,7 @@ export class InstitucionProgramaController { 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.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionProgramaService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -111,10 +100,7 @@ export class InstitucionProgramaController { 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.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.institucionProgramaService.findAllByIdInstitucion( parseInt(query.id_institucion), true, @@ -137,10 +123,7 @@ export class InstitucionProgramaController { update(@Request() req, @Body() body: UpdateProgramaDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionProgramaService.update(admin, body); } } diff --git a/src/institucion-programa/institucion-programa.module.ts b/src/institucion-programa/institucion-programa.module.ts index 89978ea..e6a4e2b 100644 --- a/src/institucion-programa/institucion-programa.module.ts +++ b/src/institucion-programa/institucion-programa.module.ts @@ -6,12 +6,14 @@ import { InstitucionProgramaService } from './institucion-programa.service'; import { InstitucionPrograma } from './entity/institucion-programa.entity'; import { Programa } from './entity/programa.entity'; import { InstitucionModule } from '../institucion/institucion.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([InstitucionPrograma, Programa]), + ValidarUsuarioModule, ], controllers: [InstitucionProgramaController], providers: [InstitucionProgramaService], diff --git a/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts b/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts index 39d957b..b8eccb0 100644 --- a/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts +++ b/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionTipoCarritoService } from './institucion-tipo-carrito.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { Usuario } from '../usuario/entity/usuario.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; @@ -33,6 +33,7 @@ import { TipoCarritoOutputDto } from './dto/output/tipo-carrito.dto'; export class InstitucionTipoCarritoController { constructor( private institucionTipoCarritoService: InstitucionTipoCarritoService, + private validarUsuarioService: ValidarUsuarioService, ) {} @Post() @@ -46,10 +47,7 @@ export class InstitucionTipoCarritoController { create(@Request() req, @Body() body: CreateInstitucionTipoCarritoDto) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.institucionTipoCarritoService.create( body.letra, body.tipo_carrito, @@ -66,15 +64,7 @@ export class InstitucionTipoCarritoController { 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.', - ); + this.validarUsuarioService.validarOperador(operador); return this.institucionTipoCarritoService.findAll(); } @@ -94,10 +84,7 @@ export class InstitucionTipoCarritoController { 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.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionTipoCarritoService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -119,10 +106,7 @@ export class InstitucionTipoCarritoController { 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.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.institucionTipoCarritoService.findAllByIdInstitucion( parseInt(query.id_institucion), true, @@ -145,10 +129,7 @@ export class InstitucionTipoCarritoController { update(@Request() req, @Body() body: UpdateInstitucionTipoCarritoDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionTipoCarritoService.update(admin, body); } } diff --git a/src/institucion-tipo-carrito/institucion-tipo-carrito.module.ts b/src/institucion-tipo-carrito/institucion-tipo-carrito.module.ts index b6f5069..0213fcf 100644 --- a/src/institucion-tipo-carrito/institucion-tipo-carrito.module.ts +++ b/src/institucion-tipo-carrito/institucion-tipo-carrito.module.ts @@ -6,12 +6,14 @@ import { InstitucionTipoCarritoService } from './institucion-tipo-carrito.servic import { InstitucionTipoCarrito } from './entity/institucion-tipo-carrito.entity'; import { TipoCarrito } from './entity/tipo-carrito.entity'; import { InstitucionModule } from '../institucion/institucion.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([InstitucionTipoCarrito, TipoCarrito]), + ValidarUsuarioModule, ], controllers: [InstitucionTipoCarritoController], providers: [InstitucionTipoCarritoService], diff --git a/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts b/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts index 4d021f2..56844b9 100644 --- a/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts +++ b/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionTipoEntradaService } from './institucion-tipo-entrada.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { Usuario } from '../usuario/entity/usuario.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; @@ -31,7 +31,10 @@ import { TipoEntradaOutputDto } from './dto/output/tipo-entrada.dto'; @Controller('institucion-tipo-entrada') @ApiTags('institucion-tipo-entrada') export class InstitucionTipoEntradaController { - constructor(private tipoEntradaService: InstitucionTipoEntradaService) {} + constructor( + private tipoEntradaService: InstitucionTipoEntradaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -44,10 +47,7 @@ export class InstitucionTipoEntradaController { create(@Request() req, @Body() body: CreateInstitucionTipoEntradaDto) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.tipoEntradaService.create(body.tipo_entrada); } @@ -61,15 +61,7 @@ export class InstitucionTipoEntradaController { 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.', - ); + this.validarUsuarioService.validarOperador(operador); return this.tipoEntradaService.findAll(); } @@ -89,10 +81,7 @@ export class InstitucionTipoEntradaController { 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.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.tipoEntradaService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -114,10 +103,7 @@ export class InstitucionTipoEntradaController { 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.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.tipoEntradaService.findAllByIdInstitucion( parseInt(query.id_institucion), true, @@ -140,10 +126,7 @@ export class InstitucionTipoEntradaController { update(@Request() req, @Body() body: UpdateInstitucionTipoEntradaDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.tipoEntradaService.update(admin, body); } } diff --git a/src/institucion-tipo-entrada/institucion-tipo-entrada.module.ts b/src/institucion-tipo-entrada/institucion-tipo-entrada.module.ts index 848b649..bb6612b 100644 --- a/src/institucion-tipo-entrada/institucion-tipo-entrada.module.ts +++ b/src/institucion-tipo-entrada/institucion-tipo-entrada.module.ts @@ -6,12 +6,14 @@ import { InstitucionTipoEntradaService } from './institucion-tipo-entrada.servic import { InstitucionModule } from '../institucion/institucion.module'; import { InstitucionTipoEntrada } from './entity/institucion-tipo-entrada.entity'; import { TipoEntrada } from './entity/tipo-entrada.entity'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([InstitucionTipoEntrada, TipoEntrada]), + ValidarUsuarioModule, ], controllers: [InstitucionTipoEntradaController], providers: [InstitucionTipoEntradaService], diff --git a/src/institucion-usuario/institucion-usuario.controller.ts b/src/institucion-usuario/institucion-usuario.controller.ts index 7327d16..685fda9 100644 --- a/src/institucion-usuario/institucion-usuario.controller.ts +++ b/src/institucion-usuario/institucion-usuario.controller.ts @@ -9,13 +9,17 @@ import { import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger'; import { InstitucionUsuarioService } from './institucion-usuario.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { UpdateInstitucionUsuarioInputDto } from './dto/input/update.dto'; @Controller('institucion-usuario') @ApiTags('institucion-usuario') export class InstitucionUsuarioController { - constructor(private institucionUsuarioService: InstitucionUsuarioService) {} + constructor( + private institucionUsuarioService: InstitucionUsuarioService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Put() @UseGuards(AuthGuard('jwt')) @@ -38,14 +42,7 @@ export class InstitucionUsuarioController { update(@Request() req, @Body() body: UpdateInstitucionUsuarioInputDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 3 && - admin.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(admin); return this.institucionUsuarioService.update(body); } } diff --git a/src/institucion-usuario/institucion-usuario.module.ts b/src/institucion-usuario/institucion-usuario.module.ts index bb202fb..88eb561 100644 --- a/src/institucion-usuario/institucion-usuario.module.ts +++ b/src/institucion-usuario/institucion-usuario.module.ts @@ -4,11 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { InstitucionUsuarioService } from './institucion-usuario.service'; import { InstitucionUsuario } from './entity/institucion-usuario.entity'; import { InstitucionUsuarioController } from './institucion-usuario.controller'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([InstitucionUsuario]), + ValidarUsuarioModule, ], providers: [InstitucionUsuarioService], exports: [InstitucionUsuarioService], diff --git a/src/institucion/institucion.controller.ts b/src/institucion/institucion.controller.ts index b86902a..5e49861 100644 --- a/src/institucion/institucion.controller.ts +++ b/src/institucion/institucion.controller.ts @@ -18,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionService } from './institucion.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { UpdateInstitucionDto } from './dto/input/update.dto'; @@ -29,7 +30,10 @@ import { InstitucionesMinOutputDto } from './dto/output/instituciones-min.dto'; @Controller('institucion') @ApiTags('institucion') export class InstitucionController { - constructor(private institucionService: InstitucionService) {} + constructor( + private institucionService: InstitucionService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(InstitucionesMinOutputDto) @Get('instituciones-activas') @@ -50,10 +54,7 @@ export class InstitucionController { 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.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.institucionService.findAll(); } @@ -72,14 +73,7 @@ export class InstitucionController { institucion(@Request() req, @Query() query: IdInstitucionDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 2 && - admin.tipoUsuario.id_tipo_usuario != 3) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarSuperAdminAdmin(admin); return this.institucionService .findById(parseInt(query.id_institucion)) .then((institucion) => { @@ -104,10 +98,7 @@ export class InstitucionController { 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.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.institucionService.findAll(); } @@ -140,14 +131,7 @@ export class InstitucionController { update(@Request() req, @Body() body: UpdateInstitucionDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 2 && - admin.tipoUsuario.id_tipo_usuario != 3) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdminAdmin(admin); return this.institucionService.update(admin, body); } } diff --git a/src/institucion/institucion.module.ts b/src/institucion/institucion.module.ts index cd81e3d..b49895d 100644 --- a/src/institucion/institucion.module.ts +++ b/src/institucion/institucion.module.ts @@ -4,11 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { InstitucionController } from './institucion.controller'; import { InstitucionService } from './institucion.service'; import { Institucion } from './entity/institucion.entity'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Institucion]), + ValidarUsuarioModule, ], controllers: [InstitucionController], providers: [InstitucionService], diff --git a/src/marca/marca.controller.ts b/src/marca/marca.controller.ts index 00d47d3..ed988b5 100644 --- a/src/marca/marca.controller.ts +++ b/src/marca/marca.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Query, @@ -18,6 +17,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { MarcaService } from './marca.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { CreateMarcaDto } from './dto/input/create.dto'; import { MarcaDto } from './dto/input/marca.dto'; @@ -26,7 +26,10 @@ import { MarcaOutputDto } from './dto/output/marca.dto'; @Controller('marca') @ApiTags('marca') export class MarcaController { - constructor(private marcaService: MarcaService) {} + constructor( + private marcaService: MarcaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -39,10 +42,7 @@ export class MarcaController { create(@Request() req, @Body() body: CreateMarcaDto) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.marcaService.create(body.marca, body.tipo); } @@ -59,15 +59,7 @@ export class MarcaController { 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.', - ); + this.validarUsuarioService.validarOperador(operador); return this.marcaService.findAll(query.tipo); } } diff --git a/src/marca/marca.module.ts b/src/marca/marca.module.ts index a2783d4..284d2a9 100644 --- a/src/marca/marca.module.ts +++ b/src/marca/marca.module.ts @@ -4,11 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { MarcaController } from './marca.controller'; import { MarcaService } from './marca.service'; import { Marca } from './entity/marca.entity'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Marca]), + ValidarUsuarioModule, ], controllers: [MarcaController], providers: [MarcaService], diff --git a/src/modelo/modelo.controller.ts b/src/modelo/modelo.controller.ts index 5aa7227..fd34a0d 100644 --- a/src/modelo/modelo.controller.ts +++ b/src/modelo/modelo.controller.ts @@ -18,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { ModeloService } from './modelo.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { CreateModeloDto } from './dto/input/create.dto'; import { ModeloDto } from './dto/input/modelo.dto'; @@ -26,7 +27,10 @@ import { ModeloOutputDto } from './dto/output/modelo.dto'; @Controller('modelo') @ApiTags('modelo') export class ModeloController { - constructor(private modeloService: ModeloService) {} + constructor( + private modeloService: ModeloService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -39,6 +43,7 @@ export class ModeloController { create(@Request() req, @Body() body: CreateModeloDto) { const superAdmin: Operador = req.user.operador; + this.validarUsuarioService.validarSuperAdmin(superAdmin); if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', @@ -59,15 +64,7 @@ export class ModeloController { 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.', - ); + this.validarUsuarioService.validarOperador(operador); return this.modeloService.findAll(query.tipo); } } diff --git a/src/modelo/modelo.module.ts b/src/modelo/modelo.module.ts index 2fe3807..d9b11d3 100644 --- a/src/modelo/modelo.module.ts +++ b/src/modelo/modelo.module.ts @@ -4,11 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { ModeloController } from './modelo.controller'; import { ModeloService } from './modelo.service'; import { Modelo } from './entity/modelo.entity'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Modelo]), + ValidarUsuarioModule, ], controllers: [ModeloController], providers: [ModeloService], diff --git a/src/modulo/modulo.controller.ts b/src/modulo/modulo.controller.ts index 474ed01..c81195a 100644 --- a/src/modulo/modulo.controller.ts +++ b/src/modulo/modulo.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,8 +18,8 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { ModuloService } from './modulo.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; -import { Usuario } from '../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'; @@ -31,7 +30,10 @@ import { ModuloMinOutputDto } from './dto/output/modulo-min.dto'; @Controller('modulo') @ApiTags('modulo') export class ModuloController { - constructor(private moduloService: ModuloService) {} + constructor( + private moduloService: ModuloService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -44,10 +46,7 @@ export class ModuloController { create(@Request() req, @Body() body: CreateModuloDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.moduloService.create(admin, body.modulo); } @@ -66,10 +65,7 @@ export class ModuloController { 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.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.moduloService.findById(parseInt(query.id_modulo)); } @@ -88,15 +84,7 @@ export class ModuloController { 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.', - ); + this.validarUsuarioService.validarOperador(operador); return this.moduloService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -134,10 +122,7 @@ export class ModuloController { update(@Request() req, @Body() body: UpdateModuloDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.moduloService.update(admin, body); } } diff --git a/src/modulo/modulo.module.ts b/src/modulo/modulo.module.ts index 6eb86b3..2e74289 100644 --- a/src/modulo/modulo.module.ts +++ b/src/modulo/modulo.module.ts @@ -5,12 +5,14 @@ import { ModuloController } from './modulo.controller'; import { ModuloService } from './modulo.service'; import { Modulo } from './entity/modulo.entity'; import { InstitucionModule } from '../institucion/institucion.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Modulo]), + ValidarUsuarioModule, ], controllers: [ModuloController], providers: [ModuloService], diff --git a/src/multa/multa.controller.ts b/src/multa/multa.controller.ts index c9b550a..fb956b8 100644 --- a/src/multa/multa.controller.ts +++ b/src/multa/multa.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { MultaService } from './multa.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { Usuario } from '../usuario/entity/usuario.entity'; import { IdUsuarioDto } from '../dto/id-usuario.dto'; @@ -35,7 +35,10 @@ import { MultasUsuarioOutputDto } from './dto/output/multas-usuario.dto'; @Controller('multa') @ApiTags('multa') export class MultaController { - constructor(private multaService: MultaService) {} + constructor( + private multaService: MultaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -57,14 +60,7 @@ export class MultaController { multar(@Request() req, @Body() body: MultarDto) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.multaService.create( body.id_prestamo, body.id_operador, @@ -102,15 +98,7 @@ export class MultaController { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.multaService.findAll(query); } @@ -134,14 +122,7 @@ export class MultaController { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.multaService.findAllByIdEquipo( parseInt(query.id_equipo), parseInt(query.pagina), @@ -168,15 +149,7 @@ export class MultaController { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.multaService.findAllByIdUsuario( parseInt(query.id_usuario), parseInt(query.pagina), @@ -199,10 +172,7 @@ export class MultaController { 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.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.multaService.findMultasActivas(parseInt(query.id_usuario)); } @@ -220,10 +190,7 @@ export class MultaController { 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.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.multaService.quitarMulta(body.id_institucion_usuario); } diff --git a/src/multa/multa.module.ts b/src/multa/multa.module.ts index 37950b7..9e84dab 100644 --- a/src/multa/multa.module.ts +++ b/src/multa/multa.module.ts @@ -11,6 +11,7 @@ import { InstitucionUsuarioModule } from '../institucion-usuario/institucion-usu import { OperadorModule } from '../operador/operador.module'; import { PrestamoModule } from '../prestamo/prestamo.module'; import { UsuarioModule } from '../usuario/usuario.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -23,6 +24,7 @@ import { UsuarioModule } from '../usuario/usuario.module'; OperadorModule, TypeOrmModule.forFeature([Multa]), UsuarioModule, + ValidarUsuarioModule, ], controllers: [MultaController], providers: [MultaService], diff --git a/src/operador/operador.controller.ts b/src/operador/operador.controller.ts index b4c8af2..ef5d26e 100644 --- a/src/operador/operador.controller.ts +++ b/src/operador/operador.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { OperadorService } from './operador.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from './entity/operador.entity'; import { CreateAdminDto } from './dto/input/create-admin.dto'; import { CreateOperadorDto } from './dto/input/create-operador.dto'; @@ -29,7 +29,10 @@ import { OperadorOutputDto } from './dto/output/operador.dto'; @Controller('operador') @ApiTags('operador') export class OperadorController { - constructor(private operadorService: OperadorService) {} + constructor( + private operadorService: OperadorService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post('admin') @UseGuards(AuthGuard('jwt')) @@ -51,10 +54,7 @@ export class OperadorController { createAdmin(@Request() req, @Body() body: CreateAdminDto) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.operadorService.create( body.id_institucion, 3, @@ -84,10 +84,7 @@ export class OperadorController { createOperador(@Request() req, @Body() body: CreateOperadorDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.operadorService.create( admin.institucion, 4, @@ -132,14 +129,7 @@ export class OperadorController { operadores(@Request() req, @Query() query: OperadoresDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 2 && - admin.tipoUsuario.id_tipo_usuario != 3) - ) - throw new ForbiddenException( - 'No tienes permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarSuperAdminAdmin(admin); return this.operadorService.findAll(query); } @@ -156,14 +146,7 @@ export class OperadorController { passwordResset(@Request() req, @Body() body: UpdateOperadorDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 2 && - admin.tipoUsuario.id_tipo_usuario != 3) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdminAdmin(admin); return this.operadorService.passwordReset( admin, body.id_operador, @@ -192,14 +175,7 @@ export class OperadorController { update(@Request() req, @Body() body: UpdateOperadorDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 2 && - admin.tipoUsuario.id_tipo_usuario != 3) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdminAdmin(admin); return this.operadorService.update(admin, body); } } diff --git a/src/operador/operador.module.ts b/src/operador/operador.module.ts index c3d346a..79d445a 100644 --- a/src/operador/operador.module.ts +++ b/src/operador/operador.module.ts @@ -9,6 +9,7 @@ import { BcryptModule } from '../bcrypt/bcrypt.module'; import { InstitucionModule } from '../institucion/institucion.module'; import { NodemailerModule } from '../nodemailer/nodemailer.module'; import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -18,6 +19,7 @@ import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; PassportModule.register({ defaultStrategy: 'jwt' }), TipoUsuarioModule, TypeOrmModule.forFeature([Operador, InformacionOperadorView]), + ValidarUsuarioModule, ], controllers: [OperadorController], providers: [OperadorService], diff --git a/src/prestamo/prestamo.controller.ts b/src/prestamo/prestamo.controller.ts index 8b3959e..30414e5 100644 --- a/src/prestamo/prestamo.controller.ts +++ b/src/prestamo/prestamo.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { PrestamoService } from './prestamo.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto'; import { IdUsuarioDto } from '../dto/id-usuario.dto'; @@ -45,7 +45,10 @@ import { Usuario } from '../usuario/entity/usuario.entity'; @Controller('prestamo') @ApiTags('prestamo') export class PrestamoController { - constructor(private prestamoService: PrestamoService) {} + constructor( + private prestamoService: PrestamoService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(ActivosOutputDto) @Get('activos') @@ -111,14 +114,7 @@ export class PrestamoController { activos(@Request() req, @Query() query: ActivosDto) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.findAll(query); } @@ -137,14 +133,7 @@ export class PrestamoController { cancelarOperador(@Request() req, @Body() body: CancelarOperadorDto) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.cancelarOperador( body.id_prestamo, body.id_operador, @@ -165,10 +154,7 @@ export class PrestamoController { cancelarUsuario(@Request() req, @Body() body: CancelarUsuarioDto) { const usuario: Usuario = req.user.usuario; - if (!usuario) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.prestamoService.cancelarUsuario(body.id_prestamo); } @@ -186,14 +172,7 @@ export class PrestamoController { entregar(@Request() req, @Body() body: EntregarDto) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.entregar(body.id_prestamo, body.id_operador); } @@ -273,14 +252,7 @@ export class PrestamoController { historial(@Request() req, @Query() query: HistorialDto) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.findAll(query); } @@ -305,14 +277,7 @@ export class PrestamoController { historialEquipo(@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 realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.findAllByIdEquipo( parseInt(query.id_equipo), parseInt(query.pagina), @@ -340,14 +305,7 @@ export class PrestamoController { historialUsuario(@Request() req, @Query() query: IdUsuarioPaginaDto) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.findAllByIdUsuario( parseInt(query.id_usuario), parseInt(query.pagina), @@ -376,10 +334,7 @@ export class PrestamoController { pedir(@Request() req, @Body() body: PedirDto) { const usuario: Usuario = req.user.usuario; - if (!usuario) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.prestamoService.create( usuario, body.id_modulo, @@ -400,17 +355,12 @@ export class PrestamoController { type: 'text', }) prestamoIdPrestamo(@Request() req, @Query() query: IdPrestamoDto) { - const operador: Operador = req.user.operador; - const usuario: Usuario = req.user.usuario; + const usuarioOperador: Operador | Usuario = + req.user.operador || req.user.usuario; - 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.', - ); + if ('id_usuario' in usuarioOperador) + this.validarUsuarioService.validarUsuario(usuarioOperador); + else this.validarUsuarioService.validarAdminOperador(usuarioOperador); return this.prestamoService.findById(parseInt(query.id_prestamo)); } @@ -430,10 +380,7 @@ export class PrestamoController { prestamoIdUsuario(@Request() req, @Query() query: IdUsuarioDto) { const usuario: Usuario = req.user.usuario; - if (!usuario) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.prestamoService.findByIdUsuario(parseInt(query.id_usuario)); } @@ -461,14 +408,7 @@ export class PrestamoController { ) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.findByNumeroInventario( parseInt(query.id_institucion), query.numero_inventario, @@ -495,14 +435,7 @@ export class PrestamoController { regresarIdPrestamo(@Request() req, @Body() body: RegresarIdPrestamoDto) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.regresarIdPrestamo( body.id_operador, body.id_prestamo, @@ -534,14 +467,7 @@ export class PrestamoController { ) { 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.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.regresarNumeroInventario( body.id_operador, body.numero_inventario, diff --git a/src/prestamo/prestamo.module.ts b/src/prestamo/prestamo.module.ts index aa849d5..a59d8a3 100644 --- a/src/prestamo/prestamo.module.ts +++ b/src/prestamo/prestamo.module.ts @@ -16,6 +16,8 @@ import { ModuloModule } from '../modulo/modulo.module'; import { MultaModule } from '../multa/multa.module'; import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; import { UsuarioModule } from '../usuario/usuario.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; + @Module({ imports: [ EquipoModule, @@ -31,6 +33,7 @@ import { UsuarioModule } from '../usuario/usuario.module'; TypeOrmModule.forFeature([Prestamo]), TipoUsuarioModule, UsuarioModule, + ValidarUsuarioModule, ], controllers: [PrestamoController], providers: [AppGateway, PrestamoService], diff --git a/src/status/status.controller.ts b/src/status/status.controller.ts index 4a6c7f0..73d17cb 100644 --- a/src/status/status.controller.ts +++ b/src/status/status.controller.ts @@ -1,21 +1,19 @@ -import { - Controller, - ForbiddenException, - Get, - Request, - UseGuards, -} from '@nestjs/common'; +import { Controller, 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 { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { StatusOutputDto } from './dto/output/status.dto'; import { Operador } from '../operador/entity/operador.entity'; @Controller('status') @ApiTags('status') export class StatusController { - constructor(private statusService: StatusService) {} + constructor( + private statusService: StatusService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(StatusOutputDto) @Get() @@ -25,15 +23,7 @@ export class StatusController { 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.', - ); + this.validarUsuarioService.validarOperador(operador); return this.statusService.findAll(); } } diff --git a/src/status/status.module.ts b/src/status/status.module.ts index 060a111..c684771 100644 --- a/src/status/status.module.ts +++ b/src/status/status.module.ts @@ -4,11 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { StatusController } from './status.controller'; import { StatusService } from './status.service'; import { Status } from './entity/status.entity'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Status]), + ValidarUsuarioModule, ], controllers: [StatusController], providers: [StatusService], diff --git a/src/tipo-usuario/tipo-usuario.controller.ts b/src/tipo-usuario/tipo-usuario.controller.ts index 6cc661c..452b930 100644 --- a/src/tipo-usuario/tipo-usuario.controller.ts +++ b/src/tipo-usuario/tipo-usuario.controller.ts @@ -1,6 +1,5 @@ import { Body, - ConflictException, Controller, Get, Post, @@ -11,6 +10,7 @@ import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { TipoUsuarioService } from './tipo-usuario.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { CreateTipoUsuarioDto } from './dto/input/create.dto'; import { TipoUsuarioOutputDto } from './dto/output/tipo-usuario.dto'; @@ -18,7 +18,10 @@ import { TipoUsuarioOutputDto } from './dto/output/tipo-usuario.dto'; @Controller('tipo-usuario') @ApiTags('tipo-usuario') export class TipoUsuarioController { - constructor(private tipoUsuarioService: TipoUsuarioService) {} + constructor( + private tipoUsuarioService: TipoUsuarioService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -31,10 +34,7 @@ export class TipoUsuarioController { create(@Request() req, @Body() body: CreateTipoUsuarioDto) { 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.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.tipoUsuarioService.create(body.tipo_usuario); } @@ -48,10 +48,7 @@ export class TipoUsuarioController { 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.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.tipoUsuarioService.findAll(); } @@ -66,15 +63,7 @@ export class TipoUsuarioController { 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.', - ); + this.validarUsuarioService.validarOperador(operador); return this.tipoUsuarioService.findAll('operador'); } } diff --git a/src/tipo-usuario/tipo-usuario.module.ts b/src/tipo-usuario/tipo-usuario.module.ts index f5c0928..a381924 100644 --- a/src/tipo-usuario/tipo-usuario.module.ts +++ b/src/tipo-usuario/tipo-usuario.module.ts @@ -4,11 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { TipoUsuarioController } from './tipo-usuario.controller'; import { TipoUsuarioService } from './tipo-usuario.service'; import { TipoUsuario } from './entity/tipo-usuario.entity'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([TipoUsuario]), + ValidarUsuarioModule, ], controllers: [TipoUsuarioController], providers: [TipoUsuarioService], diff --git a/src/upload-file/upload-file.controller.ts b/src/upload-file/upload-file.controller.ts index 8f33a69..f8e8f91 100644 --- a/src/upload-file/upload-file.controller.ts +++ b/src/upload-file/upload-file.controller.ts @@ -5,6 +5,7 @@ import { Post, Query, Response, + Request, UploadedFile, UseGuards, UseInterceptors, @@ -13,23 +14,31 @@ import { AuthGuard } from '@nestjs/passport'; import { FileInterceptor } from '@nestjs/platform-express'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { UploadFileService } from './upload-file.service'; +import { Operador } from '../operador/entity/operador.entity'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; @Controller('upload-file') @ApiTags('upload-file') export class UploadFileController { - constructor(private uploadFileService: UploadFileService) {} + constructor( + private uploadFileService: UploadFileService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post('carga-masiva-equipos') @UseGuards(AuthGuard('jwt')) @UseInterceptors(FileInterceptor('csv')) @ApiBearerAuth('jwt') cargaMasivaEquipos( + @Request() req, @UploadedFile() file: Express.Multer.File, @Query() query: IdInstitucionDto, ) { + const admin: Operador = req.user.operador; const path = file ? `${file.destination}/${file.filename}` : null; + this.validarUsuarioService.validarAdmin(admin); if (!file) throw new BadRequestException('No se mandó ningún archivo.'); return this.uploadFileService.createEquipos( path, @@ -42,11 +51,14 @@ export class UploadFileController { @UseInterceptors(FileInterceptor('csv')) @ApiBearerAuth('jwt') cargaMasivaUsuarios( + @Request() req, @UploadedFile() file: Express.Multer.File, @Query() query: IdInstitucionDto, ) { + const admin: Operador = req.user.operador; const path = file ? `${file.destination}/${file.filename}` : null; + this.validarUsuarioService.validarAdmin(admin); if (!file) throw new BadRequestException('No se mandó ningún archivo.'); return this.uploadFileService.createUsuarios( path, @@ -57,7 +69,14 @@ export class UploadFileController { @Get('download-logo') @UseGuards(AuthGuard('jwt')) @ApiBearerAuth('jwt') - downloadLogo(@Response() res, @Query() query: IdInstitucionDto) { + downloadLogo( + @Request() req, + @Response() res, + @Query() query: IdInstitucionDto, + ) { + const operador: Operador = req.user.operador; + + this.validarUsuarioService.validarAdminOperador(operador); return this.uploadFileService .downloadLogo(parseInt(query.id_institucion)) .then((logo) => res.download(logo)); @@ -66,14 +85,20 @@ export class UploadFileController { @Get('download-plantilla-equipos') @UseGuards(AuthGuard('jwt')) @ApiBearerAuth('jwt') - downloadPlantillaEquipos(@Response() res) { + downloadPlantillaEquipos(@Request() req, @Response() res) { + const admin: Operador = req.user.operador; + + this.validarUsuarioService.validarAdmin(admin); return res.download('./upload/plantilla_equipos.csv'); } @Get('download-plantilla-usuarios') @UseGuards(AuthGuard('jwt')) @ApiBearerAuth('jwt') - downloadPlantillaUsuarios(@Response() res) { + downloadPlantillaUsuarios(@Request() req, @Response() res) { + const admin: Operador = req.user.operador; + + this.validarUsuarioService.validarAdmin(admin); return res.download('./upload/plantilla_alumnos.csv'); } @@ -82,9 +107,13 @@ export class UploadFileController { @ApiBearerAuth('jwt') @UseInterceptors(FileInterceptor('logo')) uploadLogo( + @Request() req, @UploadedFile() file: Express.Multer.File, @Query() query: IdInstitucionDto, ) { + const admin: Operador = req.user.operador; + + this.validarUsuarioService.validarAdmin(admin); return this.uploadFileService.uploadLogo( file, parseInt(query.id_institucion), diff --git a/src/upload-file/upload-file.module.ts b/src/upload-file/upload-file.module.ts index 40d7f24..06f3d93 100644 --- a/src/upload-file/upload-file.module.ts +++ b/src/upload-file/upload-file.module.ts @@ -19,6 +19,7 @@ import { ModeloModule } from '../modelo/modelo.module'; import { ModuloModule } from '../modulo/modulo.module'; import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; import { UsuarioModule } from '../usuario/usuario.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -49,6 +50,7 @@ import { UsuarioModule } from '../usuario/usuario.module'; PassportModule.register({ defaultStrategy: 'jwt' }), TipoUsuarioModule, UsuarioModule, + ValidarUsuarioModule, ], controllers: [UploadFileController], providers: [AppGateway, UploadFileService], diff --git a/src/usuario/usuario.controller.ts b/src/usuario/usuario.controller.ts index e554d5c..1df9ebf 100644 --- a/src/usuario/usuario.controller.ts +++ b/src/usuario/usuario.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -20,6 +19,7 @@ import { import { Recaptcha } from '@nestlab/google-recaptcha'; import { Serealize } from '../interceptors/serialize.interceptor'; import { UsuarioService } from './usuario.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { RegistrarUsuarioInputDto } from './dto/input/registrar.dto'; import { UpdateUsuarioInputDto } from './dto/input/update.dto'; @@ -31,7 +31,10 @@ import { UsuariosOutputDto } from './dto/output/usuarios.dto'; @Controller('usuario') @ApiTags('usuario') export class UsuarioController { - constructor(private usuarioService: UsuarioService) {} + constructor( + private usuarioService: UsuarioService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post('registrar') @Recaptcha() @@ -77,14 +80,7 @@ export class UsuarioController { update(@Request() req, @Body() body: UpdateUsuarioInputDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 3 && - admin.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(admin); return this.usuarioService.update(body); } @@ -101,14 +97,7 @@ export class UsuarioController { passwordResset(@Request() req, @Body() body: UpdateUsuarioInputDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 3 && - admin.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(admin); return this.usuarioService.passwordReset(body.id_usuario); } @@ -127,14 +116,7 @@ export class UsuarioController { usuario(@Request() req, @Query() query: UsuarioInputDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 3 && - admin.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(admin); return this.usuarioService.findByUsuario(query.usuario, true, true); } @@ -184,15 +166,7 @@ export class UsuarioController { usuarios(@Request() req, @Query() query: UsuariosInputDto) { 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.', - ); + this.validarUsuarioService.validarOperador(operador); return this.usuarioService.findAll(query); } } diff --git a/src/usuario/usuario.module.ts b/src/usuario/usuario.module.ts index df94c8a..16436ae 100644 --- a/src/usuario/usuario.module.ts +++ b/src/usuario/usuario.module.ts @@ -11,6 +11,7 @@ import { InstitucionCarreraModule } from '../institucion-carrera/institucion-car import { InstitucionUsuarioModule } from '../institucion-usuario/institucion-usuario.module'; import { NodemailerModule } from '../nodemailer/nodemailer.module'; import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -22,6 +23,7 @@ import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; PassportModule.register({ defaultStrategy: 'jwt' }), TipoUsuarioModule, TypeOrmModule.forFeature([Usuario, InformacionUsuarioView]), + ValidarUsuarioModule, ], controllers: [UsuarioController], providers: [UsuarioService], diff --git a/src/validar-usuario/validar-usuario.module.ts b/src/validar-usuario/validar-usuario.module.ts new file mode 100644 index 0000000..e9c9d93 --- /dev/null +++ b/src/validar-usuario/validar-usuario.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { ValidarUsuarioService } from './validar-usuario.service'; + +@Module({ + providers: [ValidarUsuarioService], + exports: [ValidarUsuarioService], +}) +export class ValidarUsuarioModule {} diff --git a/src/validar-usuario/validar-usuario.service.spec.ts b/src/validar-usuario/validar-usuario.service.spec.ts new file mode 100644 index 0000000..518ecb9 --- /dev/null +++ b/src/validar-usuario/validar-usuario.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ValidarUsuarioService } from './validar-usuario.service'; + +describe('ValidarUsuarioService', () => { + let service: ValidarUsuarioService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ValidarUsuarioService], + }).compile(); + + service = module.get(ValidarUsuarioService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/validar-usuario/validar-usuario.service.ts b/src/validar-usuario/validar-usuario.service.ts new file mode 100644 index 0000000..9a4e17f --- /dev/null +++ b/src/validar-usuario/validar-usuario.service.ts @@ -0,0 +1,53 @@ +import { ForbiddenException, Injectable } from '@nestjs/common'; +import { Operador } from 'src/operador/entity/operador.entity'; +import { Usuario } from 'src/usuario/entity/usuario.entity'; + +@Injectable() +export class ValidarUsuarioService { + validarUsuario(usuario: Usuario) { + if (!usuario) this.sinPermisos(); + } + + validarAdmin(admin: Operador) { + if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) this.sinPermisos(); + } + + validarAdminOperador(admin: Operador) { + if ( + !admin || + (admin.tipoUsuario.id_tipo_usuario != 3 && + admin.tipoUsuario.id_tipo_usuario != 4) + ) + this.sinPermisos(); + } + + validarOperador(operador: Operador) { + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 2 && + operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + this.sinPermisos(); + } + + validarSuperAdmin(superAdmin: Operador) { + if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) + this.sinPermisos(); + } + + validarSuperAdminAdmin(admin: Operador) { + if ( + !admin || + (admin.tipoUsuario.id_tipo_usuario != 2 && + admin.tipoUsuario.id_tipo_usuario != 3) + ) + this.sinPermisos(); + } + + sinPermisos() { + throw new ForbiddenException( + 'No tienes los permisos necesarios para realizar esta acción.', + ); + } +}