Files
Deep-Package-Inspection/docs/log/2026-07-28-2250-fix-site-switcher.md
T

2.3 KiB

Iteration Log — Fix: Site Switcher Tidak Bisa Pindah ke Nexus

Date: 2026-07-28 22:50 WIB Trigger: User report — "ketika login sebagai superadmin, default site SIAB. kenapa tidak bisa berpindah ke site nexus?"


Masalah

SUPER_ADMIN memilih site Nexus dari dropdown SiteSelector → halaman reload → site kembali ke SIAB. User tidak bisa bertahan di Nexus site.


Root Cause Analysis

Bug: Sidebar.tsx baris 33-36 — localStorage Overwrite

Setiap kali Sidebar di-mount, ia fetch /api/auth/me dan:

if (data.user.site_uuid) {
  localStorage.setItem('backone_site_uuid', data.user.site_uuid);  // OVERWRITE!
  setSelectedSite(data.user.site_uuid);
}

Pengguna admin (SUPER_ADMIN) memiliki site_uuid: '6681452d_...' (SIAB) tersimpan di DB. Setiap page load, Sidebar selalu overwrite localStorage dengan SIAB.

Flow yang rusak:

User pilih Nexus → localStorage="Nexus" → handleSiteSelect → window.location.reload()
→ Sidebar mount → fetch /api/auth/me → user.site_uuid="SIAB" → localStorage.setItem("SIAB") ← BUG!
→ tampil SIAB lagi

Tambahan: site_uuid SUPER_ADMIN di DB

User admin punya site_uuid: '6681452d_...' tersimpan di DB. Untuk SUPER_ADMIN, field ini seharusnya tidak membatasi — backend sudah benar (getBaseFilter pakai requestedSiteUuid dari header, bukan user.site_uuid). Masalahnya ada di frontend yang overwrite localStorage.


Fix

File: src/components/layout/Sidebar.tsx

Logic baru: role-aware site UUID preservation:

  • Global roles (SUPER_ADMIN, EXECUTIVE, SOC_ANALYST, ENGINEER): Prioritaskan pilihan tersimpan di localStorage. Hanya set dari DB jika belum ada.
  • Restricted roles (TENANT_ADMIN, AGENT_VIEWER, COMPANY_*): Selalu pakai site_uuid dari DB (mereka tidak bisa switch site).

Flow yang benar setelah fix:

User pilih Nexus → localStorage="Nexus" → reload
→ Sidebar mount → fetch /api/auth/me → isGlobalRole=true
→ storedSiteUuid="Nexus" exists → siteToUse="Nexus" ← PRESERVED ✅
→ tampil Nexus dengan benar

Validation

  • Build: ✅ PASS (25/25 pages)
  • Logic: Site switch sekarang persisten untuk SUPER_ADMIN
  • Tidak ada breaking changes untuk restricted roles

Files Changed

  • src/components/layout/Sidebar.tsx — Fix localStorage overwrite bug