v0.6.6: разделение — req.email(аудит) vs req.displayEmail(экран)
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ipwhitelist",
|
"name": "ipwhitelist",
|
||||||
"version": "0.6.5",
|
"version": "0.6.6",
|
||||||
"description": "IP WhiteList microservice for cloud provider",
|
"description": "IP WhiteList microservice for cloud provider",
|
||||||
"main": "server.js",
|
"main": "server.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
// ═══════════════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
version: '0.6.5',
|
version: '0.6.6',
|
||||||
|
|
||||||
// ── 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',
|
||||||
|
|||||||
@@ -35,12 +35,13 @@ function enhanceImpersonation(req, res, next) {
|
|||||||
|
|
||||||
// Подмена сессии — авто-имперсонация
|
// Подмена сессии — авто-имперсонация
|
||||||
const allCids = [COMPANY, ...EXTRA];
|
const allCids = [COMPANY, ...EXTRA];
|
||||||
u.originalUserEmail = ORIGINAL; // кто реально вошёл
|
u.originalUserEmail = ORIGINAL; // кто реально вошёл (KC)
|
||||||
u.email = TARGET; // в кого имперсонируем
|
u.email = TARGET; // в кого имперсонируем
|
||||||
u.clientId = COMPANY;
|
u.clientId = COMPANY;
|
||||||
u.activeClientId = COMPANY;
|
u.activeClientId = COMPANY;
|
||||||
u.allClientIds = allCids;
|
u.allClientIds = allCids;
|
||||||
u.isImpersonated = true;
|
u.isImpersonated = true;
|
||||||
|
u.impersonatedCompanyId = COMPANY; // для resolveContext
|
||||||
u.companyName = COMPANY;
|
u.companyName = COMPANY;
|
||||||
u.profiles = allCids.map(cid => ({ client_id: cid, company_name: cid }));
|
u.profiles = allCids.map(cid => ({ client_id: cid, company_name: cid }));
|
||||||
|
|
||||||
|
|||||||
@@ -36,9 +36,12 @@ function resolveContext(req, res, next) {
|
|||||||
// u.originalUserEmail — реальный админ
|
// u.originalUserEmail — реальный админ
|
||||||
// u.impersonatedCompanyId — W-номер компании
|
// u.impersonatedCompanyId — W-номер компании
|
||||||
const ADMIN_EMAIL = process.env.ADMIN_EMAIL || '';
|
const ADMIN_EMAIL = process.env.ADMIN_EMAIL || '';
|
||||||
const isImpersonated = !!(u.originalUserEmail && u.impersonatedCompanyId);
|
const isImpersonated = !!(u.originalUserEmail && u.impersonatedCompanyId) || u.isImpersonated;
|
||||||
|
|
||||||
|
// req.email — для АУДИТА (реальный юзер при имперсонации)
|
||||||
req.email = isImpersonated ? u.originalUserEmail : (u.email || '');
|
req.email = isImpersonated ? u.originalUserEmail : (u.email || '');
|
||||||
|
// req.displayEmail — для ПОКАЗА на экране (текущий, может быть имперсонированным)
|
||||||
|
req.displayEmail = u.email || '';
|
||||||
req.clientId = isImpersonated ? u.impersonatedCompanyId : (u.activeClientId || u.clientId || '');
|
req.clientId = isImpersonated ? u.impersonatedCompanyId : (u.activeClientId || u.clientId || '');
|
||||||
req.companyName = u.companyName || req.clientId;
|
req.companyName = u.companyName || req.clientId;
|
||||||
req.isAdmin = !!(u.isAdmin && u.adminMode) || (ADMIN_EMAIL && u.email === ADMIN_EMAIL);
|
req.isAdmin = !!(u.isAdmin && u.adminMode) || (ADMIN_EMAIL && u.email === ADMIN_EMAIL);
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ function createUserRouter() {
|
|||||||
originalUserEmail: req.impersonatedBy ? req.email : null,
|
originalUserEmail: req.impersonatedBy ? req.email : null,
|
||||||
email: req.email || (req.user && req.user.email) || (req.session && req.session.user && req.session.user.email) || '',
|
email: req.email || (req.user && req.user.email) || (req.session && req.session.user && req.session.user.email) || '',
|
||||||
loginEmail: (req.session && req.session.user && (req.session.user.originalUserEmail || req.session.user.email)) || req.email || '',
|
loginEmail: (req.session && req.session.user && (req.session.user.originalUserEmail || req.session.user.email)) || req.email || '',
|
||||||
|
displayEmail: req.displayEmail || req.email || '',
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
res.status(500).send('<h2>Ошибка</h2><pre>' + e.message + '</pre><a href="/app">Назад</a>');
|
res.status(500).send('<h2>Ошибка</h2><pre>' + e.message + '</pre><a href="/app">Назад</a>');
|
||||||
|
|||||||
+2
-2
@@ -80,7 +80,7 @@
|
|||||||
<% if (typeof isImpersonated !== 'undefined' && isImpersonated) { %>
|
<% if (typeof isImpersonated !== 'undefined' && isImpersonated) { %>
|
||||||
<% if (isImpersonated) { %>
|
<% if (isImpersonated) { %>
|
||||||
<div class="alert alert-warn">
|
<div class="alert alert-warn">
|
||||||
⚠️ Режим имперсонации — данные сохраняются от имени <strong><%= activeClientId %></strong>
|
⚠️ Режим имперсонации — данные сохраняются от имени <strong><%= displayEmail %></strong>
|
||||||
(вы: <%= loginEmail %>)
|
(вы: <%= loginEmail %>)
|
||||||
</div>
|
</div>
|
||||||
<% } %>
|
<% } %>
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
<div class="stat <%= used >= limit ? 'full' : '' %>"><div class="num"><%= used %></div><div class="lbl">из <%= limit %></div></div>
|
<div class="stat <%= used >= limit ? 'full' : '' %>"><div class="num"><%= used %></div><div class="lbl">из <%= limit %></div></div>
|
||||||
<div style="margin-left:auto;display:flex;align-items:center;font-weight:600;font-size:1.1rem;color:var(--text);">
|
<div style="margin-left:auto;display:flex;align-items:center;font-weight:600;font-size:1.1rem;color:var(--text);">
|
||||||
<span style="font-weight:600;font-size:1.1rem;color:var(--muted);margin-right:.75rem;"><%= activeClientId %></span>
|
<span style="font-weight:600;font-size:1.1rem;color:var(--muted);margin-right:.75rem;"><%= activeClientId %></span>
|
||||||
<span style="font-weight:600;font-size:1.1rem;"><%= email %></span>
|
<span style="font-weight:600;font-size:1.1rem;"><%= displayEmail %></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user