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

75 lines
2.3 KiB
Markdown

# 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:
```js
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