feat: adminMode — чек-бокс переключения админского интерфейса
Шаг 1: /toggle-admin роут в ui/routes/auth.js - переключает req.session.adminMode - canAdmin = isAdmin || clientId === WZ01112 (временно) Шаг 2: resolveUser в ui/index.js - req.user.adminMode из req.session.adminMode - isAdmin = IAM.isAdmin || clientId === WZ01112 (временно) Шаг 3: adminMode вместо isAdmin в интерфейсе - ui/routes/entries.js: adminMode решает админский view - ui/routes/admin.js: requireAdmin проверяет adminMode Шаг 4: views/index.ejs - чек-бокс «Администратор» (виден только если isAdmin) - ссылки Аудит/Лимиты видны только при adminMode - селектор компаний — при adminMode
This commit is contained in:
+1
-1
@@ -14,7 +14,7 @@ const { Router } = require('express');
|
||||
const api = require('../api-client');
|
||||
|
||||
function requireAdmin(req, res, next) {
|
||||
if (!req.user || !req.user.isAdmin) {
|
||||
if (!req.user || !req.user.adminMode) {
|
||||
return res.status(403).render('error', {
|
||||
status: 403,
|
||||
message: 'Доступ запрещён — требуются права администратора.',
|
||||
|
||||
@@ -166,6 +166,20 @@ function createRouter({ auth, MOCK_USERS, authLimiter }) {
|
||||
res.redirect(returnTo || '/');
|
||||
});
|
||||
|
||||
// ── Переключатель режима администратора ──────────────────────────────
|
||||
// 🔮 isAdmin будет из IAM, временно: isAdmin || clientId === WZ01112
|
||||
router.post('/toggle-admin', (req, res) => {
|
||||
const canAdmin = req.session.user && (
|
||||
req.session.user.isAdmin ||
|
||||
req.session.user.clientId === (process.env.ADMIN_CLIENT_ID || 'WZ01112')
|
||||
);
|
||||
if (!canAdmin) return res.status(403).send('Forbidden');
|
||||
|
||||
req.session.adminMode = !req.session.adminMode;
|
||||
// Редирект туда же откуда пришли
|
||||
res.redirect(req.get('Referer') || '/');
|
||||
});
|
||||
|
||||
// GET /logout
|
||||
router.get('/logout', (req, res) => {
|
||||
req.session.destroy(() => res.redirect('/login'));
|
||||
|
||||
@@ -77,7 +77,7 @@ function createRouter() {
|
||||
try {
|
||||
let entries = [], limit = 15, selectedCompany = null, companies = [];
|
||||
|
||||
if (req.user.isAdmin) {
|
||||
if (req.user.adminMode) {
|
||||
const cr = await api.get('/api/v1/companies', token);
|
||||
companies = cr.data.companies || [];
|
||||
|
||||
@@ -120,6 +120,7 @@ function createRouter() {
|
||||
used: entries.length,
|
||||
user: req.user,
|
||||
isAdmin: req.user.isAdmin,
|
||||
adminMode: req.user.adminMode,
|
||||
companies,
|
||||
selectedCompany,
|
||||
allClientIds: hasMultiple ? req.user.allClientIds : null,
|
||||
@@ -135,7 +136,7 @@ function createRouter() {
|
||||
} catch (e) {
|
||||
res.render('index', {
|
||||
entries: [], limit: 15, used: 0,
|
||||
user: req.user, isAdmin: req.user.isAdmin,
|
||||
user: req.user, isAdmin: req.user.isAdmin, adminMode: req.user.adminMode,
|
||||
companies: [], selectedCompany: null,
|
||||
allClientIds: null, activeClientId: null,
|
||||
error: 'Ошибка загрузки: ' + e.message,
|
||||
|
||||
Reference in New Issue
Block a user