ayuda
This commit is contained in:
@@ -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' };
|
||||
|
||||
@@ -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 {}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
export enum Role {
|
||||
Admin = '1',
|
||||
Responsable = '2',
|
||||
Admin = 1,
|
||||
Responsable = 2,
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user