From cd93a40104bd4c97df37542369872e0a2019864c Mon Sep 17 00:00:00 2001 From: ypratama Date: Tue, 1 Sep 2026 09:40:51 +0700 Subject: [PATCH] Fix: Prevent backend from returning empty data when site_uuid is all --- backend/routes/dashboard/agentLocations.js | 14 ++++++++++---- backend/routes/dashboard/agents.js | 18 ++++++++++++------ backend/routes/dashboard/helpers.js | 4 ++-- backend/routes/dashboard/tenantConfig.js | 3 +-- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/backend/routes/dashboard/agentLocations.js b/backend/routes/dashboard/agentLocations.js index 93dc563..eff7017 100644 --- a/backend/routes/dashboard/agentLocations.js +++ b/backend/routes/dashboard/agentLocations.js @@ -111,11 +111,17 @@ router.get('/agent-flows', async (req, res) => { try { const requestedSiteUuid = req.headers['x-backone-site-uuid']; const isGlobalUser = req.user?.role === 'SUPER_ADMIN' || + req.user?.role === 'EXECUTIVE' || ((!req.user?.site_uuid || req.user?.site_uuid === 'default') && ['SOC_ANALYST', 'ENGINEER'].includes(req.user?.role)); - - const siteUuid = (isGlobalUser && requestedSiteUuid) - ? requestedSiteUuid - : (req.user?.site_uuid || '6681452d_9cae_4ff4_8ae8_0d504774265e'); + + let siteUuid = null; + if (isGlobalUser && requestedSiteUuid && requestedSiteUuid !== 'all') { + siteUuid = requestedSiteUuid; + } else if (!isGlobalUser && req.user?.site_uuid) { + siteUuid = req.user.site_uuid; + } else { + siteUuid = '6681452d_9cae_4ff4_8ae8_0d504774265e'; + } const timeFilter = getTimeFilter(req); diff --git a/backend/routes/dashboard/agents.js b/backend/routes/dashboard/agents.js index 5f4cbbf..217015e 100644 --- a/backend/routes/dashboard/agents.js +++ b/backend/routes/dashboard/agents.js @@ -35,9 +35,9 @@ router.get('/agents/uptime', async (req, res) => { req.user?.role === 'EXECUTIVE' || ((!req.user?.site_uuid || req.user?.site_uuid === 'default') && ['SOC_ANALYST', 'ENGINEER'].includes(req.user?.role)); - if (isGlobalUser && requestedSiteUuid) { + if (isGlobalUser && requestedSiteUuid && requestedSiteUuid !== 'all') { query.site_uuid = { $in: [requestedSiteUuid, 'global'] }; - } else if (req.user?.site_uuid) { + } else if (!isGlobalUser && req.user?.site_uuid) { query.site_uuid = { $in: [req.user.site_uuid, 'global'] }; } @@ -117,9 +117,9 @@ router.get('/agents/storage', async (req, res) => { ((!req.user?.site_uuid || req.user?.site_uuid === 'default') && ['SOC_ANALYST', 'ENGINEER'].includes(req.user?.role)); let siteUuid = null; - if (isGlobalUser && requestedSiteUuid) { + if (isGlobalUser && requestedSiteUuid && requestedSiteUuid !== 'all') { siteUuid = requestedSiteUuid; - } else if (req.user?.site_uuid) { + } else if (!isGlobalUser && req.user?.site_uuid) { siteUuid = req.user.site_uuid; } @@ -178,8 +178,14 @@ router.get('/agents/list', async (req, res) => { } else { // Admin/SUPER_ADMIN: filter berdasarkan site UUID dari header const requestedSiteUuid = req.headers['x-backone-site-uuid']; - if (requestedSiteUuid) filter.site_uuid = { $in: [requestedSiteUuid, 'global'] }; - else if (user?.site_uuid) filter.site_uuid = { $in: [user.site_uuid, 'global'] }; + const effectiveRole = user?._originalRole || user?.role; + const isGlobalUser = effectiveRole === 'SUPER_ADMIN' || effectiveRole === 'EXECUTIVE'; + + if (isGlobalUser && requestedSiteUuid && requestedSiteUuid !== 'all') { + filter.site_uuid = { $in: [requestedSiteUuid, 'global'] }; + } else if (user?.site_uuid) { + filter.site_uuid = { $in: [user.site_uuid, 'global'] }; + } } const agents = await db.collection('agent_registry') diff --git a/backend/routes/dashboard/helpers.js b/backend/routes/dashboard/helpers.js index 8eada05..156ce22 100644 --- a/backend/routes/dashboard/helpers.js +++ b/backend/routes/dashboard/helpers.js @@ -40,9 +40,9 @@ function getBaseFilter(req, timeFilter = null) { req.user?.role === 'EXECUTIVE' || ((!req.user?.site_uuid || req.user?.site_uuid === 'default') && ['SOC_ANALYST', 'ENGINEER'].includes(req.user?.role)); - if (isGlobalUser && requestedSiteUuid) { + if (isGlobalUser && requestedSiteUuid && requestedSiteUuid !== 'all') { filter.site_uuid = { $in: [requestedSiteUuid, 'global'] }; - } else if (req.user?.site_uuid) { + } else if (!isGlobalUser && req.user?.site_uuid) { filter.site_uuid = { $in: [req.user.site_uuid, 'global'] }; } diff --git a/backend/routes/dashboard/tenantConfig.js b/backend/routes/dashboard/tenantConfig.js index e6114b7..e2181d1 100644 --- a/backend/routes/dashboard/tenantConfig.js +++ b/backend/routes/dashboard/tenantConfig.js @@ -14,11 +14,10 @@ router.get('/tenant-config', async (req, res) => { if (isGlobalUser) { const requestedSiteUuid = req.headers['x-backone-site-uuid']; - if (requestedSiteUuid) { + if (requestedSiteUuid && requestedSiteUuid !== 'all') { siteUuid = requestedSiteUuid; } } else if (req.user?.site_uuid) { - // For TENANT_ADMIN or other isolated roles, they only see their own site branding siteUuid = req.user.site_uuid; }