feat: implementacion de dashboards por rol, soporte de clases virtuales concurrentes en importador de sheets y cartelera del dia
This commit is contained in:
@@ -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 };
|
||||
Reference in New Issue
Block a user