From 351cb6afe61e898e6c8e3c18c7cf74b0d9fae0e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Thu, 11 Jun 2026 19:25:11 +0400 Subject: [PATCH] feat: test impersonation via IMPERSONATION_ORIGINAL/TARGET/COMPANY env vars MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ui/index.js: resolveUser checks env vars, only for matching email - Закомментировать блок 'TEST IMPERSONATION' для прода --- ui/index.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/ui/index.js b/ui/index.js index d6a077d..7de6560 100644 --- a/ui/index.js +++ b/ui/index.js @@ -64,16 +64,26 @@ function createUiRouter({ auth, MOCK_USERS, authLimiter }) { const canAdminMode = !!(iamAdmin && activeClientId === ADMIN_CLIENT_ID) || (isNail && activeClientId === ADMIN_CLIENT_ID); const sessionIsImpersonated = req.session && req.session.user && req.session.user.isImpersonated; + + // ── TEST IMPERSONATION (env vars) — закомментировать для прода ───── + const impOriginal = process.env.IMPERSONATION_ORIGINAL || ''; + const impTarget = process.env.IMPERSONATION_TARGET || ''; + const impCompany = process.env.IMPERSONATION_COMPANY || ''; + const email = req.session?.user?.email || payload.email || payload.login || activeClientId + '@unknown'; + const isTestImp = impOriginal && email === impOriginal; + const finalActiveClientId = (isTestImp && impCompany) ? impCompany : activeClientId; + // ── /TEST IMPERSONATION ───────────────────────────────────────────── + req.user = { clientId: rawClientId, allClientIds, - activeClientId, + activeClientId: finalActiveClientId, companyId: payload.company_id || payload.companyId || null, - companyName: payload.company_name || payload.companyName || activeClientId, - email: req.session?.user?.email || payload.email || payload.login || activeClientId + '@unknown', + companyName: payload.company_name || payload.companyName || finalActiveClientId, + email: (isTestImp && impTarget) ? impTarget : email, isAdmin: iamAdmin || isNail, - isImpersonated: !!sessionIsImpersonated, - originalUserEmail: req.session?.user?.originalUserEmail || '', + isImpersonated: !!sessionIsImpersonated || isTestImp, + originalUserEmail: req.session?.user?.originalUserEmail || (isTestImp ? impOriginal : ''), originalUserFullName: req.session?.user?.originalUserFullName || '', canAdminMode, adminMode: !!(req.session && req.session.adminMode),