v0.5.3: fix multi-company API isolation (client_id param)

This commit is contained in:
2026-06-02 10:57:52 +03:00
parent a083f65323
commit 1b1b3b6bd7
3 changed files with 15 additions and 4 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "ipwhitelist", "name": "ipwhitelist",
"version": "0.5.2", "version": "0.5.3",
"description": "IP WhiteList microservice for cloud provider", "description": "IP WhiteList microservice for cloud provider",
"main": "server.js", "main": "server.js",
"scripts": { "scripts": {
+4 -1
View File
@@ -37,6 +37,7 @@ function createEntriesRouter({ q }) {
// Определить компанию из запроса. // Определить компанию из запроса.
// Admin с ?company=<id> → компания по ID. // Admin с ?company=<id> → компания по ID.
// User с ?client_id=<id> (мульти-компания) → компания по clientId.
// Иначе → компания пользователя (UPSERT). // Иначе → компания пользователя (UPSERT).
async function resolveCompany(req) { async function resolveCompany(req) {
if (req.user.isAdmin && req.query.company) { if (req.user.isAdmin && req.query.company) {
@@ -48,7 +49,9 @@ function createEntriesRouter({ q }) {
if (!c) throw Object.assign(new Error('Company not found'), { status: 404 }); if (!c) throw Object.assign(new Error('Company not found'), { status: 404 });
return c; return c;
} }
return q.getOrCreateCompany(req.user.clientId, req.user.companyName); // Мульти-компания: если передан client_id — использовать его
const effectiveClientId = req.query.client_id || req.user.clientId;
return q.getOrCreateCompany(effectiveClientId, req.user.companyName);
} }
// GET /api/v1/entries — список записей + лимит // GET /api/v1/entries — список записей + лимит
+10 -2
View File
@@ -27,7 +27,12 @@ function createRouter() {
// Суффикс ?company=<id> для API — только числовой ID или пусто // Суффикс ?company=<id> для API — только числовой ID или пусто
function companyQuery(req) { function companyQuery(req) {
const id = req.query.company || (req.body && req.body.company_id); const id = req.query.company || (req.body && req.body.company_id);
return id ? '?company=' + id : ''; if (id) return '?company=' + id;
// Мульти-компания: передаём активный client_id
if (!req.user.isAdmin && req.user.allClientIds && req.user.allClientIds.length > 1) {
return '?client_id=' + encodeURIComponent(req.user.activeClientId || req.user.clientId);
}
return '';
} }
// GET / — список записей // GET / — список записей
@@ -69,7 +74,10 @@ function createRouter() {
} else { } else {
// Обычный пользователь: запрашиваем записи для активной компании // Обычный пользователь: запрашиваем записи для активной компании
const activeClientId = req.user.activeClientId || req.user.clientId; const activeClientId = req.user.activeClientId || req.user.clientId;
const er = await api.get('/api/v1/entries', token); const clientIdParam = req.user.allClientIds && req.user.allClientIds.length > 1
? '?client_id=' + encodeURIComponent(activeClientId)
: '';
const er = await api.get('/api/v1/entries' + clientIdParam, token);
entries = er.data.entries || []; entries = er.data.entries || [];
limit = er.data.limit || 15; limit = er.data.limit || 15;
} }