v0.6.7: фикс — req.email=текущий, impersonatedBy=реальный (правильно)

This commit is contained in:
2026-06-15 10:28:06 +04:00
parent f007b4e721
commit 68f230bedd
5 changed files with 11 additions and 10 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "ipwhitelist",
"version": "0.6.6",
"version": "0.6.7",
"description": "IP WhiteList microservice for cloud provider",
"main": "server.js",
"scripts": {
+1 -1
View File
@@ -9,7 +9,7 @@
// ═══════════════════════════════════════════════════════════════════════════════
module.exports = {
version: '0.6.6',
version: '0.6.7',
// ── IAM ──────────────────────────────────────────────────────────────────
iamUrl: process.env.V2_IAM_URL || 'https://auth-api.ngcloud.ru/api/v1/auth/user',
+5 -5
View File
@@ -38,15 +38,15 @@ function resolveContext(req, res, next) {
const ADMIN_EMAIL = process.env.ADMIN_EMAIL || '';
const isImpersonated = !!(u.originalUserEmail && u.impersonatedCompanyId) || u.isImpersonated;
// req.email — для АУДИТА (реальный юзер при имперсонации)
req.email = isImpersonated ? u.originalUserEmail : (u.email || '');
// req.displayEmail — для ПОКАЗА на экране (текущий, может быть имперсонированным)
req.displayEmail = u.email || '';
// req.email = ТЕКУЩИЙ юзер (имперсонированный или реальный)
// ВЕЗДЕ: created_by, экран, формы
req.email = u.email || '';
req.clientId = isImpersonated ? u.impersonatedCompanyId : (u.activeClientId || u.clientId || '');
req.companyName = u.companyName || req.clientId;
req.isAdmin = !!(u.isAdmin && u.adminMode) || (ADMIN_EMAIL && u.email === ADMIN_EMAIL);
req.isImpersonated = isImpersonated;
req.impersonatedBy = isImpersonated ? u.email : null;
// req.impersonatedBy = РЕАЛЬНЫЙ юзер (только в колонке impersonated_by аудита)
req.impersonatedBy = isImpersonated ? (u.originalUserEmail || '') : null;
req.allClientIds = u.allClientIds || [req.clientId];
req.profiles = u.profiles || [];
+2 -1
View File
@@ -43,7 +43,8 @@ function createUserRouter() {
originalUserEmail: req.impersonatedBy ? req.email : null,
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 || '',
displayEmail: req.displayEmail || req.email || '',
email: req.email || '',
});
} catch (e) {
res.status(500).send('<h2>Ошибка</h2><pre>' + e.message + '</pre><a href="/app">Назад</a>');
+2 -2
View File
@@ -80,7 +80,7 @@
<% if (typeof isImpersonated !== 'undefined' && isImpersonated) { %>
<% if (isImpersonated) { %>
<div class="alert alert-warn">
⚠️ Режим имперсонации — данные сохраняются от имени <strong><%= displayEmail %></strong>
⚠️ Режим имперсонации — данные сохраняются от имени <strong><%= email %></strong>
(вы: <%= loginEmail %>)
</div>
<% } %>
@@ -102,7 +102,7 @@
<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);">
<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;"><%= displayEmail %></span>
<span style="font-weight:600;font-size:1.1rem;"><%= email %></span>
</div>
</div>