Skip to content

Commit 6464146

Browse files
committed
Fix: validar propiedad del docente al eliminar asignaciones
1 parent ecd2505 commit 6464146

2 files changed

Lines changed: 37 additions & 4 deletions

File tree

middlewares/protect.js

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,4 +301,37 @@ module.exports.DocenteVicerrectorANDSecretaria = async (req, res, next) => {
301301
}
302302

303303
return res.status(401).json({ message: "No autorizado, token no encontrado" });
304-
}
304+
}
305+
306+
module.exports.validarPropietarioAsignacion = async (req, res, next) => {
307+
let token;
308+
309+
if (req.headers.authorization && req.headers.authorization.startsWith("Bearer")) {
310+
try {
311+
token = req.headers.authorization.split(" ")[1];
312+
const decoded = jwt.verify(token, process.env.JWT_SECRET);
313+
314+
const Asignacion = require("../models/asignacion.model");
315+
const asignacion = await Asignacion.findByPk(req.params.id);
316+
317+
if (!asignacion) {
318+
return res.status(404).json({ message: "Asignación no encontrada" });
319+
}
320+
321+
if (decoded.subRol === "Administrador") {
322+
return next();
323+
}
324+
325+
if (asignacion.nroCedula_docente !== decoded.id) {
326+
return res.status(403).json({ message: "No tienes permisos para modificar esta asignación" });
327+
}
328+
329+
return next();
330+
} catch (error) {
331+
console.error("Error en validarPropietarioAsignacion:", error);
332+
return res.status(401).json({ message: "Token inválido o expirado" });
333+
}
334+
}
335+
336+
return res.status(401).json({ message: "No autorizado, token no encontrado" });
337+
};

routes/asignacion.routes.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
const AsignacionController = require('../controllers/asignacion.controller');
2-
const {Docente,DocenteANDReprsentante,docenteVicerrector,DocenteVicerrectorANDSecretaria,docenteAdministrador}=require('../middlewares/protect')
2+
const {Docente,DocenteANDReprsentante,docenteVicerrector,DocenteVicerrectorANDSecretaria,docenteAdministrador,validarPropietarioAsignacion}=require('../middlewares/protect')
33
module.exports = (app) => {
44
app.post('/api/asignacion/crear',Docente, AsignacionController.createAsignacion);
5-
app.put('/api/asignacion/editar/:id',docenteAdministrador ,AsignacionController.updateAsignacion);
5+
app.put('/api/asignacion/editar/:id',Docente, validarPropietarioAsignacion, AsignacionController.updateAsignacion);
66
app.get('/api/asignacion/obtener/:id',DocenteANDReprsentante ,AsignacionController.getAsignacion);
7-
app.delete('/api/asignacion/eliminar/:id',Docente ,AsignacionController.deleteAsignacion);
7+
app.delete('/api/asignacion/eliminar/:id',Docente, validarPropietarioAsignacion, AsignacionController.deleteAsignacion);
88
app.get('/api/asignacion/docente/:id_docente', DocenteANDReprsentante,AsignacionController.getAsignacionesPorDocente);
99
app.get('/api/asignacion/nivel/:nivel/:periodo',docenteVicerrector,AsignacionController.getAsignacionesPorNivel)
1010
app.get('/api/asignacion/obtener/periodo/:periodo',DocenteVicerrectorANDSecretaria ,AsignacionController.getAsignaciones);

0 commit comments

Comments
 (0)