feat: implementacion de dashboards por rol, soporte de clases virtuales concurrentes en importador de sheets y cartelera del dia

This commit is contained in:
2026-09-18 23:04:48 -03:00
parent 47b50ede7e
commit 1080acd43a
240 changed files with 8354 additions and 8886 deletions
@@ -0,0 +1,76 @@
const apiClient = require('../services/apiClient');
const axios = require('axios');
const requireAuth = (req, res, next) => {
const token = req.cookies.auth_token;
if (!token) {
return res.redirect('/auth/login');
}
// Inyectar el token en la configuración de Axios para esta request particular
req.apiClient = axios.create({
...apiClient.defaults,
headers: {
...apiClient.defaults.headers,
'Authorization': `Bearer ${token}`
}
});
let user = {
name: 'System',
first_name: 'System',
email: 'admin@edu-space.com',
role: 'admin',
is_authenticated: true,
is_admin: () => true,
has_permission: () => true,
can_edit_reservation: () => true,
can_delete_reservation: () => true,
has_role: () => true,
get_institutional_role: () => 'admin',
role_badge_display: {
class: 'bg-primary text-white',
icon: 'bi-shield-check',
label: 'Administrador'
}
};
try {
const payloadBase64 = token.split('.')[1];
const decoded = JSON.parse(Buffer.from(payloadBase64, 'base64').toString('utf8'));
if (decoded.exp && (decoded.exp * 1000) < Date.now()) {
console.log('Token expired, redirecting to /auth/login');
res.clearCookie('auth_token');
return res.redirect('/auth/login');
}
const roleStr = (decoded.role || 'Admin').toLowerCase();
user = {
...user,
id: decoded.sub,
name: decoded.name || 'System',
first_name: (decoded.name || 'System').split(' ')[0],
email: decoded.email || 'admin@edu-space.com',
role: roleStr,
is_admin: () => roleStr === 'admin' || decoded.is_admin === true,
role_badge_display: {
class: roleStr === 'admin' ? 'bg-primary text-white' : 'bg-info text-white',
icon: roleStr === 'admin' ? 'bi-shield-check' : 'bi-person',
label: decoded.role || 'Administrador'
}
};
} catch (e) {
console.error('Error decoding token payload:', e.message);
}
req.user = user;
res.locals.user = user;
res.locals.current_user = user;
res.locals.role = user.role;
next();
};
module.exports = { requireAuth };