57 lines
3.1 KiB
Markdown
57 lines
3.1 KiB
Markdown
# Iteration Log — 2026-07-28 18:21 — Bug Fix (Ad-hoc)
|
|
|
|
## Permintaan
|
|
User melaporkan 2 bug di halaman `/user-accounts`:
|
|
1. **Gambar 2**: Akun `company_admin` tidak bisa melihat agent/perusahaannya sendiri (tampil "No Company Accounts")
|
|
2. **Gambar 3**: Form "Create External Account" menampilkan role teknikal/operasional internal (Executive, Tenant Admin, SOC Analyst, Engineer) alih-alih role user/pengguna perusahaan
|
|
|
|
---
|
|
|
|
## Bug 1 — COMPANY_ADMIN Tidak Bisa Melihat Company Card Sendiri
|
|
|
|
### Root Cause
|
|
- `backend/routes/auth/users.js` baris 34: `query.username = { $ne: req.adminUser.username }` (self-exclude) berlaku untuk **semua** role termasuk `COMPANY_ADMIN`
|
|
- Saat `COMPANY_ADMIN` login dan tidak ada user lain di perusahaannya → hasil query kosong
|
|
- `page.tsx` baris 64-79: `companiesMap` dibentuk dari hasil query backend → kosong → `companies = []` → tampil "No Company Accounts"
|
|
|
|
### Fix
|
|
- **`backend/routes/auth/users.js`**: Untuk `COMPANY_ADMIN`, query di-return lebih awal tanpa `$ne` (self-exclude). COMPANY_ADMIN kini bisa melihat dirinya sendiri dalam daftar company users.
|
|
- **`src/app/(dashboard)/user-accounts/page.tsx`**: Tambah state `currentUsername` dari `/api/auth/me`, diteruskan ke `getColumns`
|
|
- **`src/app/(dashboard)/user-accounts/columns.tsx`**: Tambah prop `currentUsername`. Baris milik diri sendiri ditampilkan sebagai "👤 (You)" dan tombol Edit di-disabled → proteksi self-edit dari tabel
|
|
|
|
### Outcome
|
|
COMPANY_ADMIN kini melihat company card-nya sendiri muncul dengan data agennya.
|
|
Self-edit dilindungi di level UI (tombol disabled + label "(You)").
|
|
|
|
---
|
|
|
|
## Bug 2 — Dropdown Role Menampilkan Role Teknikal Internal
|
|
|
|
### Root Cause
|
|
- `src/components/admin/RoleSelect.tsx`: `SUPER_ADMIN_ROLES` berisi `EXECUTIVE`, `TENANT_ADMIN`, `SOC_ANALYST`, `ENGINEER`, `COMPANY_ADMIN`
|
|
- Role-role teknikal ini tidak relevan untuk user/pengguna perusahaan yang dibuat melalui "Create External Account"
|
|
|
|
### Fix
|
|
- **`RoleSelect.tsx`**: `SUPER_ADMIN_ROLES` diubah menjadi **Company Admin**, **Company Operator**, **Company Viewer** saja
|
|
- **`backend/routes/auth/users.js`**: `validRoles` untuk `SUPER_ADMIN` ditambahkan `COMPANY_OPERATOR` dan `COMPANY_VIEWER` agar backend menerima role baru dari dropdown
|
|
|
|
### Outcome
|
|
Dropdown sekarang hanya menampilkan role yang relevan untuk user perusahaan/klien.
|
|
Backend menerima semua role yang mungkin dipilih.
|
|
|
|
---
|
|
|
|
## Langkah-langkah
|
|
1. Analisis screenshot dari user
|
|
2. Baca `users.js`, `page.tsx`, `columns.tsx`, `RoleSelect.tsx`, `useExternalAccountForm.ts`
|
|
3. Identifikasi root cause kedua bug
|
|
4. Fix backend `users.js` (COMPANY_ADMIN self-visibility + validRoles)
|
|
5. Fix frontend `page.tsx` (tambah currentUsername state)
|
|
6. Fix frontend `columns.tsx` (tambah prop currentUsername, self-edit protection)
|
|
7. Fix frontend `RoleSelect.tsx` (ubah SUPER_ADMIN_ROLES)
|
|
8. Build verification: 25/25 halaman berhasil, tidak ada error
|
|
|
|
## Pertimbangan untuk Next Time
|
|
- Jika ke depan perlu membuat akun internal BackOne (Executive, Tenant Admin, dll), perlu form/endpoint terpisah
|
|
- Self-edit untuk COMPANY_ADMIN sebaiknya diarahkan ke halaman profil, bukan user-accounts table
|