// ═══════════════════════════════════════════════════════════════════════════════ // 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 };