Lewati ke konten

Pengguna & Peran

Setiap orang yang bisa masuk dashboard punya satu akun dengan satu peran. Peran itulah yang menentukan menu apa yang muncul dan halaman apa yang boleh dibuka. Fitur ini mengurus data akun itu: melihat daftar user, mengubah profil, dan mengganti password — baik password sendiri maupun password user lain (oleh admin).

  • Admin — menambah/mengubah data user dan mereset password user lain.
  • Setiap user — mengganti password sendiri dan memeriksa profilnya.
flowchart LR
  A[Admin buka daftar user] --> B[Filter / cari user]
  B --> C[Pilih user]
  C --> D{Ubah apa?}
  D -- profil / peran --> E[PUT user]
  D -- password user lain --> F[PUT user/change-password]
  D -- password sendiri --> G[PATCH user/change-my-password]
  E --> H[Data user tersimpan]
  F --> H
  G --> H
  H --> I[Perubahan berlaku pada login berikutnya]
  1. Admin membuka daftar user dan memfilter berdasarkan kriteria yang tersedia.
  2. Admin memilih user, lalu mengubah profil/peran atau mereset password.
  3. User sendiri bisa mengganti password lewat menu profil (change-my-password).
  4. Perubahan peran baru terasa setelah user login ulang, karena menu dan rute disaring dari data peran saat halaman dimuat.
  1. Buka menu pengaturan user (bagian Pengguna di sidebar, hanya muncul untuk peran yang diberi akses).
  2. Gunakan filter untuk menemukan akun; daftar dibagi per halaman.
  3. Pilih akun, ubah peran atau data profil, lalu simpan.
  4. Untuk mengganti password sendiri: buka menu profil → ganti password → isi password lama dan baru.

Kalau gagal: perubahan peran tidak langsung terlihat di layar user tersebut — minta dia login ulang. Kalau menu pengaturan tidak muncul sama sekali, peran akunmu memang tidak punya akses.

Hal Keterangan
Logika src/features/user/ (api.ts, hooks/, type/UserRole.ts)
Penjaga akses src/containers/_nav.jsx (menu) dan src/containers/TheContent.jsx (rute)
Server GET user/me, GET /user, PUT /user, PUT /user/change-password, PATCH /user/change-my-password

Aturan teknis:

  • Daftar user berhalaman. getAllUser memakai params dan mengembalikan Page<AllUser>, bukan array biasa.
  • Empat jalur tulis yang berbeda. PUT /user untuk data user, PUT /user/change-password untuk mereset password user lain, PATCH /user/change-my-password untuk password sendiri, GET user/me untuk profil sesi berjalan. Jangan tertukar: hanya change-my-password yang tidak butuh identitas user di body.
  • Peran adalah enum tertutup di src/features/user/type/UserRole.ts (25 nilai): ADMIN, FINANCE, FINANCE_EICK, FINANCE_SPV, FINANCE_PARTNER, COST_CONTROL, CUSTOMER_SERVICE, CS_MANAGER, CRM_MANAGER, ANALYST, ADVERTISER, PARTNER, HELP_DESK, SUPPLY_CHAIN_SUPERVISOR, SHOPEE_PLATFORM, TIKTOK_PLATFORM, INPUTTER, PRINCIPAL, HR, CEO, CBO, CSO, MT, AFFILIATE, AFFILIATE_MANAGER. Menambah peran berarti menyentuh enum, _nav.jsx, dan routes.js sekaligus.
  • Otorisasi hanya di klien. Penjagaan menu/rute berjalan di React. Server tetap harus menolak sendiri; jangan menganggap rute tersembunyi berarti endpoint aman.
  • Dipakai oleh: Login & Akses — peran dibaca setelah login untuk menyusun menu.
  • Dipakai oleh: Transaksi — setiap rute transaksi mendaftar peran yang boleh membukanya.
  • Satu akun = satu peran (user.role), bukan daftar peran; user.roles yang dipakai di beberapa tempat berisi objek peran lain (mis. platform), jadi jangan disamakan.
  • Rute tanpa roles terbuka untuk semua user yang login.
  • Perubahan peran tidak memaksa sesi aktif milik user tersebut berakhir; efeknya baru terasa pada pemuatan berikutnya.
  • Isian form tambah/ubah user (tipe kendali, wajib/tidak, validasi per field)
  • Urutan proses saat simpan dan respons yang diharapkan
  • Redirect atau pesan setelah simpan berhasil
  • 2026-11-12 — dokumen dibuat dari erdigma branch main @ 2e7ad26.