Files
Deep-Package-Inspection/docs/log/2026-07-28-1959-goal.md
T

68 lines
3.7 KiB
Markdown

# Iteration Log — 2026-07-28 19:59 — /goal Ad-hoc Feature
## Permintaan
User melaporkan 2 fitur yang hilang untuk role COMPANY_ADMIN:
1. Tidak ada tab **Agents** di sidebar → COMPANY_ADMIN tidak bisa melihat agent yang di-assign
2. Tidak ada fitur **View As** di halaman User Accounts → COMPANY_ADMIN tidak bisa melihat data dari perspektif COMPANY_OPERATOR/VIEWER
## Root Cause Analysis
### Masalah 1 — Agents Tab Tidak Muncul
- `Sidebar.tsx` baris 124-125: Filter `/agents` hanya untuk `SUPER_ADMIN`, `EXECUTIVE`, `TENANT_ADMIN`
- `useAgentsData.ts` baris 132: Redirect jika bukan salah satu dari tiga role tersebut
- Semua agents ditampilkan tanpa filter `agent_uuids` → tidak aman untuk COMPANY_ADMIN
### Masalah 2 — Tidak Ada View-As di User Accounts
- `user-accounts/columns.tsx`: Tidak ada kolom View-As sama sekali
- `user-accounts/page.tsx`: Tidak ada handler View-As untuk user
- Backend `requireAdmin` tidak include `COMPANY_OPERATOR` → mereka tidak bisa panggil endpoint view-as
## Perubahan yang Dilakukan
### Frontend
| File | Perubahan |
|------|-----------|
| `Sidebar.tsx` | Tambah `COMPANY_ADMIN` dan `COMPANY_OPERATOR` ke filter `/agents` |
| `useAgentsData.ts` | Allow COMPANY_ADMIN/OPERATOR, filter agents hanya yang ada di `agent_uuids` mereka, store `myAgentUuids` dari `/api/auth/me` |
| `agents/page.tsx` | Tampilkan Agent Network Map untuk COMPANY_ADMIN (read-only, `canEdit=false`) |
| `agents/columns.tsx` | Tambah tombol View-As (👁️) di kolom Actions untuk COMPANY_ADMIN dan COMPANY_OPERATOR |
| `user-accounts/columns.tsx` | Tambah kolom "View As" — tombol tampil untuk COMPANY_OPERATOR dan COMPANY_VIEWER (bukan self, bukan admin) |
| `user-accounts/page.tsx` | Tambah `viewAsLoading` state + `handleViewAsUser()` handler, pass ke `getColumns` |
### Backend
| File | Perubahan |
|------|-----------|
| `backend/middleware/auth.js` | Tambah `COMPANY_OPERATOR` ke `validAdminRoles` → bisa akses endpoint admin |
| `backend/routes/auth/viewAs.js` | Log filter untuk COMPANY_ADMIN/OPERATOR: hanya lihat log mereka sendiri (`admin_id`) |
## Langkah Implementasi
1. Research: baca Sidebar.tsx, useAgentsData.ts, columns.tsx, viewAs.js, middleware/auth.js
2. Fix Sidebar filter untuk /agents
3. Fix useAgentsData: allow COMPANY_ADMIN/OPERATOR + filter agents by agent_uuids
4. Fix agents/page.tsx: show map untuk COMPANY_ADMIN (read-only)
5. Fix agents/columns.tsx: tambah View-As button untuk COMPANY_ADMIN/OPERATOR
6. Fix user-accounts/columns.tsx: tambah kolom View-As
7. Fix user-accounts/page.tsx: tambah handleViewAsUser + viewAsLoading
8. Fix backend auth.js: tambah COMPANY_OPERATOR
9. Fix backend viewAs.js: tambah filter log untuk COMPANY_ADMIN/OPERATOR
10. Build verification → ✅ PASS (TypeScript bersih, 25/25 halaman)
11. Deploy ke production via SFTP
## Logika View-As di User Accounts
COMPANY_ADMIN bisa klik "View As" pada baris COMPANY_OPERATOR/VIEWER di tabel.
- Sistem mengambil `agent_uuids[0]` dari user target
- Memanggil `startViewAs(agentUuid, label)` dengan label = nama user + role
- Dashboard akan refresh dan menampilkan data dari perspektif agent tersebut
- Jika user target tidak punya assigned agents → alert informatif
## Build Result
```
✓ Compiled successfully in 15.1s
✓ TypeScript: PASS
✓ 25/25 static pages generated in 908ms
```
## Pertimbangan untuk Next Time
- View-As di User Accounts menggunakan agent_uuids[0] sebagai konteks. Jika user punya multiple agents, perlu UI untuk memilih agent mana yang ingin di-view-as.
- COMPANY_VIEWER belum bisa masuk ke endpoint `/admin/view-as` (belum di `requireAdmin`) karena memang seharusnya COMPANY_VIEWER tidak bisa melakukan View-As sendiri — hanya bisa di-view-as-kan oleh COMPANY_ADMIN.