64 lines
2.6 KiB
JavaScript
64 lines
2.6 KiB
JavaScript
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;
|
|
if (req.session.user.rol === 'superadmin') {
|
|
res.locals.allCompanies = await Company.findAll();
|
|
}
|
|
}
|
|
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();
|
|
};
|
|
}
|
|
};
|