v2: WZ01112 admin toggle
This commit is contained in:
@@ -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'));
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
@@ -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()">
|
||||
|
||||
Reference in New Issue
Block a user