diff --git a/package.json b/package.json index cae6ef0..fde38ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ipwhitelist", - "version": "0.4.4", + "version": "0.4.5", "description": "IP WhiteList microservice for cloud provider", "main": "server.js", "scripts": { diff --git a/ui/routes/entries.js b/ui/routes/entries.js index 942e77e..bdbe8b4 100644 --- a/ui/routes/entries.js +++ b/ui/routes/entries.js @@ -17,13 +17,16 @@ function createRouter() { // Вычислить URL для возврата (с учётом выбранной компании) function backUrl(req) { const companyId = req.query.company || (req.body && req.body.company_id); - return companyId ? '/?company=' + companyId : '/'; + if (!companyId || companyId === 'own') return '/?company=own'; + return '/?company=' + companyId; } // Суффикс ?company= для вызовов API + // 'own' = компания admin без ?company — API использует getOrCreateCompany function companyQuery(req) { const companyId = req.query.company || (req.body && req.body.company_id); - return companyId ? '?company=' + companyId : ''; + if (!companyId || companyId === 'own') return ''; + return '?company=' + companyId; } // GET / — список записей @@ -36,19 +39,28 @@ function createRouter() { const cr = await api.get('/api/v1/companies', token); companies = cr.data.companies || []; - const companyId = req.query.company ? parseInt(req.query.company, 10) : null; + const companyParam = req.query.company || ''; + const companyId = companyParam && companyParam !== 'own' ? parseInt(companyParam, 10) : null; - // Если company не выбрана — редиректим на первую в списке - if (!companyId && companies.length > 0) { - return res.redirect('/?company=' + companies[0].id); + // Без параметра — редирект на свою компанию + if (!companyParam) { + return res.redirect('/?company=own'); } - selectedCompany = companyId ? companies.find(c => c.id === companyId) || null : null; - - if (selectedCompany) { - const er = await api.get('/api/v1/entries?company=' + companyId, token); + if (companyParam === 'own') { + // Собственные записи admin (getOrCreateCompany внутри API) + const er = await api.get('/api/v1/entries', token); entries = er.data.entries || []; - limit = er.data.limit || selectedCompany.custom_limit || selectedCompany.default_limit || 15; + limit = er.data.limit || 15; + selectedCompany = { id: 'own', name: 'Моя компания', client_id: req.user.clientId }; + } else { + selectedCompany = companyId ? companies.find(c => c.id === companyId) || null : null; + + if (selectedCompany) { + const er = await api.get('/api/v1/entries?company=' + companyId, token); + entries = er.data.entries || []; + limit = er.data.limit || selectedCompany.custom_limit || selectedCompany.default_limit || 15; + } } } else { const er = await api.get('/api/v1/entries', token); diff --git a/views/index.ejs b/views/index.ejs index b63e5c0..233004d 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -176,7 +176,7 @@ // Для admin: selectedCompany — выбранная компания (объект из getAllCompanies). // Для обычного пользователя: selectedCompany — их компания (из getOrCreateCompany). // company_id — числовой PK для передачи в скрытые поля форм. - const companyPk = selectedCompany ? selectedCompany.id : null; + const companyPk = selectedCompany ? (selectedCompany.id === 'own' ? null : selectedCompany.id) : null; %> @@ -187,6 +187,7 @@ Компания: - → Аудит этой компании → Лимиты