Files

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();
};
}
};