feat: inicializacion de Help Desk segun estandar Telcotronics con bitacora de errores e integracion MCP
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
const Company = require('../models/Company');
|
||||
|
||||
module.exports = {
|
||||
isAuthenticated: (req, res, next) => {
|
||||
if (req.session.user) return next();
|
||||
req.flash('error_msg', 'Por favor inicia sesión');
|
||||
res.redirect('/login');
|
||||
},
|
||||
isSuperAdmin: (req, res, next) => {
|
||||
if (req.session.user && req.session.user.rol === 'superadmin') return next();
|
||||
req.flash('error_msg', 'Acceso denegado');
|
||||
res.redirect('/');
|
||||
},
|
||||
isCompanyAdmin: (req, res, next) => {
|
||||
if (req.session.user && ['superadmin', 'admin'].includes(req.session.user.rol)) return next();
|
||||
req.flash('error_msg', 'Acceso denegado');
|
||||
res.redirect('/');
|
||||
},
|
||||
isAgent: (req, res, next) => {
|
||||
if (req.session.user && ['superadmin', 'admin', 'agent'].includes(req.session.user.rol)) return next();
|
||||
req.flash('error_msg', 'Acceso denegado');
|
||||
res.redirect('/');
|
||||
},
|
||||
loadCompany: async (req, res, next) => {
|
||||
if (req.session.user && req.session.user.company_id) {
|
||||
const company = await Company.findById(req.session.user.company_id);
|
||||
res.locals.company = company;
|
||||
}
|
||||
next();
|
||||
},
|
||||
checkPlan: (feature) => {
|
||||
return async (req, res, next) => {
|
||||
if (!res.locals.company) return next();
|
||||
const company = res.locals.company;
|
||||
if (!company.is_active) {
|
||||
req.flash('error_msg', 'Tu cuenta está desactivada');
|
||||
return res.redirect('/logout');
|
||||
}
|
||||
if (feature === 'users') {
|
||||
const User = require('../models/User');
|
||||
const count = await User.countByCompany(company.id);
|
||||
if (count >= company.max_users) {
|
||||
req.flash('error_msg', `Límite de usuarios alcanzado (${company.max_users})`);
|
||||
return res.redirect('/');
|
||||
}
|
||||
}
|
||||
if (feature === 'tickets') {
|
||||
const Ticket = require('../models/Ticket');
|
||||
const [rows] = await require('../config/db').query(
|
||||
'SELECT COUNT(*) as total FROM tickets WHERE company_id = ?', [company.id]
|
||||
);
|
||||
if (rows[0].total >= company.max_tickets) {
|
||||
req.flash('error_msg', `Límite de tickets alcanzado (${company.max_tickets})`);
|
||||
return res.redirect('/');
|
||||
}
|
||||
}
|
||||
next();
|
||||
};
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user