simplify: toggle adminMode, canAdminMode flag, remove getOrCreateCompany fallback

- ui/index.js: canAdminMode = isAdmin AND WZ01112 (временно || WZ01112)
- views/index.ejs: checkbox → toggle с JS fetch, условие canAdminMode
- ui/routes/entries.js: убран getOrCreateCompany-фоллбек для админа
- Админ без ?company= видит список компаний, без автозагрузки
- isAdmin теперь чисто из IAM (без || WZ01112)
This commit is contained in:
2026-06-11 13:15:37 +04:00
parent 1794610f77
commit 13466ebd37
5 changed files with 111 additions and 32 deletions
+6 -2
View File
@@ -58,8 +58,11 @@ function createUiRouter({ auth, MOCK_USERS, authLimiter }) {
? sessionActive
: (allClientIds[0] || rawClientId);
// 🔮 isAdmin через IAM, временно: || clientId === WZ01112
// 🔮 isAdmin через IAM
const iamAdmin = req.session && req.session.user && req.session.user.isAdmin;
// ВРЕМЕННО: WZ01112 без isAdmin тоже видит toggle (для тестов)
const canAdminMode = !!(iamAdmin && activeClientId === ADMIN_CLIENT_ID)
|| activeClientId === ADMIN_CLIENT_ID; // ← убрать после тестов
req.user = {
clientId: rawClientId,
allClientIds,
@@ -67,7 +70,8 @@ function createUiRouter({ auth, MOCK_USERS, authLimiter }) {
companyId: payload.company_id || payload.companyId || null,
companyName: payload.company_name || payload.companyName || activeClientId,
email: payload.email || activeClientId + '@unknown',
isAdmin: iamAdmin || activeClientId === ADMIN_CLIENT_ID,
isAdmin: iamAdmin,
canAdminMode,
adminMode: !!(req.session && req.session.adminMode),
};
} catch (e) {
+10 -22
View File
@@ -83,29 +83,17 @@ function createRouter() {
const companyId = req.query.company ? parseInt(req.query.company, 10) : null;
if (!companyId) {
// Админ без ?company= — показываем свою компанию
let ownCo = companies.find(c => c.client_id === req.user.clientId) || null;
if (!ownCo) {
await api.get('/api/v1/entries', token); // создаст компанию через getOrCreateCompany
const cr2 = await api.get('/api/v1/companies', token);
ownCo = (cr2.data.companies || []).find(c => c.client_id === req.user.clientId) || null;
}
if (ownCo) {
const includeDeleted = req.query.includeDeleted === 'true' ? '&includeDeleted=true' : '';
const er = await api.get('/api/v1/entries?company=' + ownCo.id + includeDeleted, token);
entries = er.data.entries || [];
limit = er.data.limit || 15;
selectedCompany = ownCo;
}
} else {
if (companyId) {
selectedCompany = companies.find(c => c.id === companyId) || null;
if (selectedCompany) {
const includeDeleted = req.query.includeDeleted === 'true' ? '&includeDeleted=true' : '';
const er = await api.get('/api/v1/entries?company=' + companyId + includeDeleted, token);
entries = er.data.entries || [];
limit = er.data.limit || 15;
}
}
// Если компания не выбрана — показываем список компаний, без записей
// (админ выбирает компанию из выпадающего списка)
if (selectedCompany) {
const includeDeleted = req.query.includeDeleted === 'true' ? '&includeDeleted=true' : '';
const er = await api.get('/api/v1/entries?company=' + selectedCompany.id + includeDeleted, token);
entries = er.data.entries || [];
limit = er.data.limit || 15;
}
} else {
// Обычный пользователь: запрашиваем записи для активной компании