2.9 KiB
Iteration Log — Fix: Role Salah Tampil di Halaman Agents
Date: 2026-07-28 23:00 WIB Trigger: User report — "kenapa role yang seharusnya ada di tab halaman user account, malah ditampilkan juga di tab halaman agents?"
Masalah
Screenshot menunjukkan section "External Accounts" di halaman /agents menampilkan:
- SOC ANALYST (sulist)
- EXECUTIVE (murphi)
- COMPANY ADMIN (faza)
- COMPANY OPERATOR (faze)
- COMPANY VIEWER (fazu)
Semua role ini seharusnya tidak ada di halaman Agents. Halaman Agents hanya
untuk akun operasional/teknikal (AGENT_VIEWER) yang terikat langsung ke satu probe agent.
Role lainnya sudah ada di halaman User Accounts.
Root Cause Analysis
Bug 1: agents/page.tsx baris 93 — Filter yang Salah Arah
// SALAH (sebelumnya):
const externalUsers = managedUsers.filter(u => u.role !== 'AGENT_VIEWER');
// → mengambil semua role KECUALI AGENT_VIEWER
// → SOC_ANALYST, EXECUTIVE, COMPANY_* semua masuk
Filter ini terbalik — seharusnya HANYA mengambil AGENT_VIEWER, bukan sebaliknya.
Bug 2: Grouping superadminUsers / siabUsers / nexusUsers ikut salah
Karena externalUsers berisi semua role non-AGENT_VIEWER:
const superadminUsers = externalUsers.filter(u => u.role === 'SUPER_ADMIN' || u.role === 'EXECUTIVE' || !u.site_uuid);
// → EXECUTIVE, SOC_ANALYST (no site_uuid) masuk ke bucket ini
const siabUsers = externalUsers.filter(u => u.site_uuid === 'SIAB_UUID' && u.role !== 'EXECUTIVE');
// → COMPANY_ADMIN, COMPANY_OPERATOR, COMPANY_VIEWER masuk
Root: Backend /api/auth/admin/users Kembalikan Semua User untuk SUPER_ADMIN
Backend mengembalikan semua user tanpa filter role untuk SUPER_ADMIN. Fix di frontend sudah cukup — filter setelah data diterima.
Fix
File: src/app/(dashboard)/agents/page.tsx
// BENAR (sesudah fix):
const agentViewerUsers = managedUsers.filter(u => u.role === 'AGENT_VIEWER');
// Grouping berdasarkan site — semuanya sudah pasti AGENT_VIEWER
const superadminUsers = agentViewerUsers.filter(u => !u.site_uuid || u.site_uuid === 'default');
const siabUsers = agentViewerUsers.filter(u => u.site_uuid === 'SIAB_UUID');
const nexusUsers = agentViewerUsers.filter(u => u.site_uuid === 'NEXUS_UUID');
File: src/app/(dashboard)/agents/ExternalAccountsSection.tsx
- Rename judul section dari "External Accounts" → "Agent Viewer Accounts"
- Label lebih spesifik: "Agent Viewer Accounts — SIAB", "Agent Viewer Accounts — Nexus", dll
Hasil
| Section | Sebelum | Sesudah |
|---|---|---|
| Agents: External Accounts | SOC_ANALYST, EXECUTIVE, COMPANY_*, AGENT_VIEWER | ✅ HANYA AGENT_VIEWER |
| User Accounts | COMPANY_*, SOC_ANALYST, EXECUTIVE | ✅ Tidak berubah |
| Section title | "External Accounts" (ambigu) | ✅ "Agent Viewer Accounts" (jelas) |
Validation
- TypeScript check: ✅ Zero errors
- Dev server: ✅ Compiled successfully