This commit is contained in:
2024-06-26 13:18:22 -06:00
parent 2bcacc5362
commit e72bbbc8fe
6 changed files with 54 additions and 26 deletions
+14 -5
View File
@@ -13,7 +13,8 @@ import { LineasInvestigacion } from '../lineas_investigacion/entities/lineas_inv
@Injectable()
export class ProfesorService {
constructor(
@InjectRepository(Profesor) private profesorRepository: Repository<Profesor>,
@InjectRepository(Profesor)
private profesorRepository: Repository<Profesor>,
private datosAcademicosService: DatosAcademicosService,
private lineasInvestigacionService: LineasInvestigacionService,
private proyectosAcademicosService: ProyectosAcademicosService,
@@ -150,10 +151,18 @@ export class ProfesorService {
throw new HttpException('Profesor not found', 404);
}
// Delete related records in datos_academicos
await this.datosAcademicosService.removeByProfesorId(id_profesor);
await this.lineasInvestigacionService.removeByProfesorId(id_profesor);
await this.proyectosAcademicosService.removeByProfesorId(id_profesor);
// Delete related records if corresponding services are available
if (this.datosAcademicosService) {
await this.datosAcademicosService.removeByProfesorId(id_profesor);
}
if (this.lineasInvestigacionService) {
await this.lineasInvestigacionService.removeByProfesorId(id_profesor);
}
if (this.proyectosAcademicosService) {
await this.proyectosAcademicosService.removeByProfesorId(id_profesor);
}
await this.profesorRepository.remove(profesor);
return { message: 'Profesor removed successfully' };
+6
View File
@@ -19,6 +19,9 @@ import { Profesor } from './Profesor/entities/profesor.entity';
import { AdscripcionModule } from "./adscripcion/adscripcion.module";
import { EdificioModule } from "./edificio/edificio.module";
import { CategoriaModule } from "./categoria/categoria.module";
import { DatosAcademicosModule } from './datos_academicos/datos_academicos.module';
import { LineasInvestigacionModule } from './lineas_investigacion/lineas_investigacion.module';
import { ProyectosAcademicosModule } from './proyectos_academicos/proyectos_academicos.module';
@Module({
imports: [
@@ -53,6 +56,9 @@ import { CategoriaModule } from "./categoria/categoria.module";
}),
}),
ProfesorModule,
DatosAcademicosModule,
LineasInvestigacionModule,
ProyectosAcademicosModule,
AdscripcionModule,
EdificioModule,
CategoriaModule,
@@ -1,11 +1,13 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { DatosAcademicos } from './entities/datos_academicos.entity';
import { DatosAcademicosService } from './datos_academicos.service';
import { DatosAcademicosController } from './datos_academicos.controller';
import { DatosAcademicos } from './entities/datos_academicos.entity';
@Module({
imports: [TypeOrmModule.forFeature([DatosAcademicos])],
providers: [DatosAcademicosService],
controllers: [DatosAcademicosController],
exports: [DatosAcademicosService],
})
export class DatosAcademicosModule {}
+2 -2
View File
@@ -1,5 +1,5 @@
export enum Role {
Admin = '1',
Responsable = '2',
Admin = 1,
Responsable = 2,
}
+20 -13
View File
@@ -3,10 +3,15 @@ import { Reflector } from '@nestjs/core';
import { JwtService } from '@nestjs/jwt';
import { Role } from './role.enum';
import { ROLES_KEY } from './roles.decorator';
import { ConfigService } from '@nestjs/config';
@Injectable()
export class RolesGuard implements CanActivate {
constructor(private reflector: Reflector, private jwtService: JwtService) {}
constructor(
private reflector: Reflector,
private jwtService: JwtService,
private configService: ConfigService
) {}
async canActivate(context: ExecutionContext): Promise<boolean> {
const requiredRoles = this.reflector.getAllAndOverride<Role[]>(ROLES_KEY, [
@@ -30,20 +35,22 @@ export class RolesGuard implements CanActivate {
throw new UnauthorizedException('No token provided');
}
let userPayload;
try {
userPayload = this.jwtService.verify(token);
const userPayload = await this.jwtService.verifyAsync(
token,
{
secret: this.configService.get<string>('JWT_SECRET'),
}
);
const userRole: Role = userPayload.id_tipo_usuario;
if (userRole === undefined) {
return false; // Si el token no contiene roles, se niega el acceso
}
return requiredRoles.includes(userRole);
} catch (error) {
throw new UnauthorizedException('Invalid token');
}
const userRoles: Role[] = userPayload.id_tipo_usuario;
if (!userRoles) {
return false; // Si el token no contiene roles, se niega el acceso
}
return requiredRoles.some(role => userRoles.includes(role));
} catch (err) {
return false; // Manejar errores de verificación de token, aquí puedes personalizar la lógica según necesites
}
}
}
+9 -5
View File
@@ -4,17 +4,21 @@ export class UserDto{
@IsString()
@IsNotEmpty()
usuario: string;
@IsString()
@IsNotEmpty()
nombre: string;
@IsString()
@IsNotEmpty()
contraseña: string;
@IsNumber()
@IsString()
@IsNotEmpty()
id_tipo_usuario:number;
id_tipo_usuario:string;
@IsString()
@IsNotEmpty()
correo: string;
}