v2: WZ01112 admin toggle

This commit is contained in:
2026-06-15 12:05:09 +04:00
parent 3e418f9f4a
commit 7fa6b43562
4 changed files with 28 additions and 3 deletions
+10
View File
@@ -56,6 +56,16 @@ function createV2Router() {
// ── /v2/admin — админка (только для isAdmin=true) ────────────────────
router.use('/admin', enhanceImpersonation, resolveContext, createAdminRouter());
// ── POST /v2/toggle-admin — переключить режим администратора ────
router.post('/toggle-admin', (req, res) => {
if (!req.session || !req.session.user) return res.redirect('/v2/login');
const u = req.session.user;
const canAdmin = (u.allClientIds || []).includes('WZ01112') || u.clientId === 'WZ01112' || !!u.isAdmin;
if (!canAdmin) return res.redirect('/v2/app');
u.adminMode = !u.adminMode;
res.redirect(req.get('Referrer') || '/v2/app');
});
// ── GET /v2/ — редирект на /v2/app ──────────────────────────────────
router.get('/', (req, res) => res.redirect('/v2/app'));
+6 -2
View File
@@ -40,10 +40,14 @@ function resolveContext(req, res, next) {
req.email = isImpersonated ? u.originalUserEmail : (u.email || '');
req.clientId = isImpersonated ? u.impersonatedCompanyId : (u.activeClientId || u.clientId || '');
req.companyName = u.companyName || req.clientId;
req.isAdmin = !!(u.isAdmin && u.adminMode);
// Админ: пользователь с WZ01112 + включён toggle «Администратор»
const allCids = u.allClientIds || [u.clientId || ''];
req.canAdmin = allCids.includes('WZ01112') || u.clientId === 'WZ01112' || !!u.isAdmin;
req.adminMode = !!u.adminMode;
req.isAdmin = req.canAdmin && req.adminMode;
req.isImpersonated = isImpersonated;
req.impersonatedBy = isImpersonated ? u.email : null;
req.allClientIds = u.allClientIds || [req.clientId];
req.allClientIds = allCids;
req.profiles = u.profiles || [];
next();
+2
View File
@@ -39,6 +39,8 @@ function createUserRouter() {
user: req.user || {},
includeDeleted,
version: config.version,
canAdmin: req.canAdmin || false,
adminMode: req.adminMode || false,
});
} catch (e) {
res.status(500).send('<h2>Ошибка</h2><pre>' + e.message + '</pre><a href="/v2/app">Назад</a>');
+10 -1
View File
@@ -11,7 +11,16 @@
</style></head><body>
<div class="bar">
<span><strong>V2 IP WhiteList</strong> <small>v<%= version %></small></span>
<span><%= user.email %> <% if (user.isAdmin) { %>| <a href="/v2/admin">ADMIN</a><% } %></span>
<span>
<% if (typeof canAdmin !== 'undefined' && canAdmin) { %>
<form method="POST" action="/v2/toggle-admin" style="display:inline">
<button style="font-size:.8rem;padding:.2rem .6rem;border:1px solid #ccc;border-radius:4px;background:<%= adminMode ? '#2563eb' : '#fff' %>;color:<%= adminMode ? '#fff' : '#333' %>;cursor:pointer;">
<%= adminMode ? 'Выйти из админки' : 'Администратор' %>
</button>
</form>
<% } %>
<%= user.email %>
</span>
<span>
<form method="GET" action="/v2/app" style="display:inline">
<select name="switchTo" onchange="this.form.submit()">