feat(source2): lock dark mode, sans-serif typography, and all recent updates
This commit is contained in:
1 parent
dd4c8f6876
commit
9f24b56e97
259 files changed
+15596
-8966
No files matched your search
@@ -0,0 +1,67 @@
|
||||
# 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.
|
||||
Reference in new issue
Block a user