Files
Deep-Package-Inspection/docs/log/2026-07-28-2300-fix-agents-role-filter.md
T

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