32 lines
1.7 KiB
JavaScript
32 lines
1.7 KiB
JavaScript
// ═══════════════════════════════════════════════════════════════════════════════
|
|
// V2 — роутер по роли
|
|
// Определяет контекст (admin/user/impersonation) и направляет куда нужно.
|
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
|
|
/**
|
|
* middleware — извлекает контекст из сессии и кладёт в req.v2_*
|
|
* Вызывается перед всеми маршрутами v2.
|
|
*/
|
|
function resolveContext(req, res, next) {
|
|
let u = req.session && req.session.v2_user;
|
|
if (!u) return res.redirect('/v2/login');
|
|
|
|
const isAdmin = !!(u.isAdmin && req.session.v2_adminMode);
|
|
const isImpersonated = !!u.isImpersonated;
|
|
|
|
// Контекст для CRUD
|
|
req.v2_email = isImpersonated ? (u.originalUserEmail || u.email) : u.email;
|
|
req.v2_clientId = isImpersonated ? (u.impersonatedCompanyId || u.activeClientId || u.clientId) : (u.activeClientId || u.clientId);
|
|
req.v2_isAdmin = isAdmin;
|
|
req.v2_isImpersonated = isImpersonated;
|
|
req.v2_impersonatedBy = isImpersonated ? u.email : null; // кто реально (для аудита)
|
|
req.v2_user = u;
|
|
req.v2_allClientIds = u.allClientIds || [];
|
|
req.v2_profiles = u.profiles || [];
|
|
req.v2_companyName = u.companyName || u.clientId;
|
|
|
|
next();
|
|
}
|
|
|
|
module.exports = { resolveContext };
|