Удалена эмуляция имперсонации (enhanceImpersonation)
- Удалён v2/src/impersonation/index.js (URL-эмуляция) - Удалён enhanceImpersonation из middleware цепочек /app и /admin - Боевая checkImpersonation (IAM) не тронута - Версия 0.1.12
This commit is contained in:
@@ -1,60 +0,0 @@
|
||||
// ═══════════════════════════════════════════════════════════════════════════════
|
||||
// V2 — Имперсонация (IAM + URL-режим)
|
||||
//
|
||||
// ЭТО: middleware — подмена сессии при имперсонации.
|
||||
// НЕ: жёсткая логика в resolveContext или user/index.js.
|
||||
//
|
||||
// IAM-имперсонация: если сессия уже содержит isImpersonated=true → не трогаем.
|
||||
//
|
||||
// URL-имперсонация: для разрешённых пользователей (IMPERSONATION_ALLOWED_USERS).
|
||||
// /v2/app?impersonate=email&company=W***
|
||||
// Полная подмена сессии: email, clientId, profiles — всё от таргета.
|
||||
//
|
||||
// ENV:
|
||||
// IMP_ALLOWED — emails через запятую (кому можно)
|
||||
// ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
const ALLOWED_USERS = new Set(
|
||||
(process.env.IMP_ALLOWED || '')
|
||||
.split(/[\s,/]+/).map(s => s.trim()).filter(Boolean)
|
||||
);
|
||||
|
||||
function enhanceImpersonation(req, res, next) {
|
||||
const u = req.session && req.session.user;
|
||||
if (!u) return next();
|
||||
|
||||
// ── IAM-имперсонация — уже в сессии, не трогаем ────────────────────
|
||||
if (u.isImpersonated) return next();
|
||||
|
||||
// ── URL-имперсонация ───────────────────────────────────────────────
|
||||
const targetEmail = req.query.impersonate;
|
||||
const targetCompany = req.query.company;
|
||||
|
||||
if (targetEmail && targetCompany && ALLOWED_USERS.has(u.email)) {
|
||||
// Сохраняем оригинал
|
||||
const origEmail = u.email;
|
||||
const origFio = u.fio;
|
||||
|
||||
// Подменяем ВСЕ данные на таргета (как делает IAM)
|
||||
u.email = targetEmail;
|
||||
u.clientId = targetCompany;
|
||||
u.activeClientId = targetCompany;
|
||||
u.allClientIds = [targetCompany];
|
||||
u.companyName = targetCompany;
|
||||
u.isImpersonated = true;
|
||||
u.originalUserEmail = origEmail;
|
||||
u.originalUserFullName = origFio ? (origFio.fullName || '') : '';
|
||||
u.impersonatedCompanyId = targetCompany;
|
||||
u.fio = null;
|
||||
|
||||
u.profiles = [{
|
||||
client_id: targetCompany,
|
||||
company_name: targetCompany,
|
||||
is_active_profile: true,
|
||||
}];
|
||||
}
|
||||
|
||||
next();
|
||||
}
|
||||
|
||||
module.exports = { enhanceImpersonation };
|
||||
Reference in New Issue
Block a user