v0.5.116: фикс impersonatedCompanyId в сессии + тестовая имперсонация по трём ENV

This commit is contained in:
2026-06-15 15:05:21 +04:00
parent dc1f629560
commit cb1e4fac22
4 changed files with 12 additions and 11 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "ipwhitelist", "name": "ipwhitelist",
"version": "0.5.115", "version": "0.5.116",
"description": "IP WhiteList microservice for cloud provider", "description": "IP WhiteList microservice for cloud provider",
"main": "server.js", "main": "server.js",
"scripts": { "scripts": {
+3 -2
View File
@@ -73,8 +73,9 @@ function createRouter({ auth, doubleCsrfProtection, generateCsrfToken, authLimit
companyName: iamData.companyName, companyName: iamData.companyName,
isAdmin: iamData.isAdmin, isAdmin: iamData.isAdmin,
isImpersonated: iamData.isImpersonated, isImpersonated: iamData.isImpersonated,
impersonationType: iamData.impersonationType, impersonationType: iamData.impersonationType,
originalUserEmail: iamData.originalUserEmail, impersonatedCompanyId: iamData.impersonatedCompanyId,
originalUserEmail: iamData.originalUserEmail,
originalUserFullName: iamData.originalUserFullName, originalUserFullName: iamData.originalUserFullName,
originalUserCompany: iamData.originalUserCompany, originalUserCompany: iamData.originalUserCompany,
fio: iamData.fio, fio: iamData.fio,
+1 -1
View File
@@ -9,7 +9,7 @@
// ═══════════════════════════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════════════════════════
module.exports = { module.exports = {
version: '0.5.115', version: '0.5.116',
// ── IAM ────────────────────────────────────────────────────────────────── // ── IAM ──────────────────────────────────────────────────────────────────
iamUrl: process.env.V2_IAM_URL || 'https://auth-api.ngcloud.ru/api/v1/auth/user', iamUrl: process.env.V2_IAM_URL || 'https://auth-api.ngcloud.ru/api/v1/auth/user',
+7 -7
View File
@@ -32,24 +32,24 @@ function enhanceImpersonation(req, res, next) {
return next(); return next();
} }
// ── Тестовый режим: полная подмена данных ─────────────────────────── // ── Тестовый режим: нужны все три — ORIGINAL, TARGET, COMPANY ────────
if (TARGET_EMAIL && u.email === ORIGINAL_EMAIL) { if (ORIGINAL_EMAIL && TARGET_EMAIL && MAIN_COMPANY && u.email === ORIGINAL_EMAIL) {
// Сохраняем isAdmin от оригинала // Сохраняем isAdmin от оригинала
const wasAdmin = u.isAdmin || (u.allClientIds || []).includes('WZ01112') || u.clientId === 'WZ01112'; const wasAdmin = u.isAdmin || (u.allClientIds || []).includes('WZ01112') || u.clientId === 'WZ01112';
// Подменяем ВСЕ данные на таргета (как делает IAM) // Подменяем ВСЕ данные на таргета (как делает IAM)
u.email = TARGET_EMAIL; u.email = TARGET_EMAIL;
u.clientId = MAIN_COMPANY || u.clientId; u.clientId = MAIN_COMPANY;
u.activeClientId = MAIN_COMPANY || u.clientId; u.activeClientId = MAIN_COMPANY;
u.allClientIds = ALL_TARGET_CIDS; u.allClientIds = ALL_TARGET_CIDS;
u.companyName = MAIN_COMPANY; u.companyName = MAIN_COMPANY;
u.isAdmin = wasAdmin; // админство сохраняется u.isAdmin = wasAdmin;
u.isImpersonated = true; u.isImpersonated = true;
u.impersonatedCompanyId = MAIN_COMPANY;
u.originalUserEmail = ORIGINAL_EMAIL; u.originalUserEmail = ORIGINAL_EMAIL;
u.originalUserFullName = u.fio ? (u.fio.fullName || '') : ''; u.originalUserFullName = u.fio ? (u.fio.fullName || '') : '';
u.fio = null; // фио таргета неизвестно u.fio = null;
// Профили таргета (имитация)
u.profiles = ALL_TARGET_CIDS.map(cid => ({ u.profiles = ALL_TARGET_CIDS.map(cid => ({
client_id: cid, client_id: cid,
company_name: cid, company_name: cid,