Skip to Content

Users (Pengguna)

CodeSET-USR
ModuleSettings
TypeMaster data (akun & akses)
StatusImplemented
PriorityP0 — MVP
ProcessSetup tenant
API[URL Postman]

1. Overview

Pengguna adalah akun yang bisa login ke tenant-dashboard. Setiap pengguna punya nama, email login, status aktif, dan satu atau lebih peran. Peran menentukan hak akses pengguna di seluruh aplikasi. Pengguna terhubung ke sebuah entitas, sehingga bila entitas yang sama juga seorang karyawan, pengguna itu bertindak sebagai karyawan tersebut, misalnya sebagai PIC Pesanan Pembelian.

Saat pengguna dibuat atau emailnya diubah, sistem mengirim email verifikasi. Pengguna harus memverifikasi email untuk mengaktifkan akun dan mendapatkan akses.

Hasil yang diharapkan: hanya orang yang berhak yang bisa masuk, dan setiap pengguna hanya bisa melakukan apa yang diizinkan perannya.

2. Problem

  • Satu akun bersama untuk banyak orang membuat aktivitas tidak bisa ditelusuri.
  • Tidak semua staf boleh mengakses semua modul, misalnya kasir tidak boleh mengubah pengaturan.
  • Email yang salah ketik membuat pengguna tidak bisa masuk; email harus diverifikasi.

3. Goals & Non-goals

Goals

  • Admin bisa membuat akun per orang dengan peran yang tepat. Indikator: setiap pengguna punya minimal satu peran.
  • Email login terverifikasi. Indikator: pengguna baru dan perubahan email melalui verifikasi email.
  • Akses bisa dicabut cepat. Indikator: pengguna bisa dinonaktifkan tanpa dihapus.

Non-goals

  • Admin mengatur password pengguna
  • SSO / login pihak ketiga, 2FA
  • Hak akses per pengguna di luar peran

4. User Scenarios

RoleScenario
OwnerMembuat akun untuk kepala toko baru dengan peran “Kepala Toko”
AdminMembuat akun untuk karyawan yang sudah terdaftar, tanpa mengetik ulang nama dan email
AdminMengganti email pengguna yang salah ketik; pengguna memverifikasi email baru
OwnerMenonaktifkan akun staf yang sudah keluar
AdminMenambah peran “Purchasing” ke pengguna yang merangkap tugas

5. User Flow

  1. Pilih sumber — Dialog muncul saat membuka Tambah Pengguna:
    • Buat dari Awal: formulir kosong.
    • Buat dari Entitas: tabel entitas yang belum punya akun pengguna. Nama pengguna dan email diisi otomatis dari entitas terpilih.
  2. Profil — Nama pengguna, email, dan status (Aktif / Tidak Aktif); semuanya wajib.
  3. Peran — Kartu peran dengan checkbox; setiap kartu menampilkan jumlah hak akses dan bisa diperluas untuk melihat serta mencari daftar hak aksesnya.
  4. Tinjauan — Ringkasan beserta error BE bila ada.
  5. Simpan — Dikirim bersama verify_url (<origin>/auth/verify-email?token=). Bila sumbernya entitas, dikirim ke endpoint by-party dengan party_id.
  6. Tersimpan — Toast sukses, kembali ke daftar pengguna. BE mengirim email verifikasi.
  7. Verifikasi — Pengguna membuka tautan di email; halaman /auth/verify-email memverifikasi token lalu mengarahkan ke login.
  8. Login — Email tampil dengan ikon terverifikasi di daftar pengguna.

Alternative paths

  • Ubah email — Di mode ubah, tab Email menerima email baru. Setelah disimpan, sistem mengirim email verifikasi ke alamat baru.
  • Tinggalkan wizard tanpa simpan — muncul konfirmasi perubahan belum disimpan.
  • Hapus pengguna — hanya dari daftar (satuan atau massal), setelah konfirmasi.

6. User Stories

Prioritas: P0 wajib untuk rilis, P1 penting, P2 kalau sempat.

US-01 — Membuat pengguna dari awal (P0)

Sebagai owner, saya ingin membuat akun untuk staf, agar mereka bisa login dengan hak akses yang sesuai.

IDKriteria penerimaan
AC-01.1Membuka Tambah Pengguna menampilkan dialog pilihan sumber; “Buat dari Awal” membuka wizard Profil → Peran → Tinjauan.
AC-01.2Nama pengguna wajib (maks 20 karakter), email wajib (format valid, maks 50 karakter), status wajib dipilih.
AC-01.3Minimal satu peran wajib dipilih.
AC-01.4Langkah Tinjauan menampilkan info bahwa email verifikasi akan dikirim setelah data disimpan.
AC-01.5Setelah berhasil, toast sukses tampil dan pengguna diarahkan ke daftar; BE mengirim email verifikasi.
AC-01.6Error BE (misalnya email sudah dipakai) tampil di langkah Tinjauan dan pada field terkait.

US-02 — Membuat pengguna dari entitas (P1)

Sebagai admin, saya ingin membuat akun dari entitas yang sudah ada (misalnya karyawan), agar tidak terjadi duplikasi identitas.

IDKriteria penerimaan
AC-02.1Tabel entitas hanya menampilkan entitas yang belum punya akun pengguna.
AC-02.2Setelah entitas dipilih dan klik Selanjutnya, nama dan email terisi dari entitas.
AC-02.3Data dikirim dengan party_id entitas terpilih.

US-03 — Mengubah profil pengguna (P0)

Sebagai admin, saya ingin mengubah nama dan status pengguna, agar akses bisa diaktifkan atau dicabut.

IDKriteria penerimaan
AC-03.1Tombol Ubah Data hanya tampil untuk pengguna dengan izin update.
AC-03.2Tab Profil menyimpan nama dan status; tombol simpan aktif hanya jika ada perubahan.

US-04 — Mengubah email pengguna (P0)

Sebagai admin, saya ingin mengganti email login pengguna, agar pengguna yang salah email tetap bisa masuk.

IDKriteria penerimaan
AC-04.1Tab Email hanya tampil di mode ubah.
AC-04.2Email baru wajib, format valid, maks 50 karakter.
AC-04.3Setelah disimpan, sistem mengirim email verifikasi ke alamat baru; info verifikasi ditampilkan di tab.

US-05 — Mengubah peran pengguna (P0)

Sebagai owner, saya ingin menambah atau mencabut peran pengguna, agar hak aksesnya sesuai tugas.

IDKriteria penerimaan
AC-05.1Tab Peran di mode lihat menampilkan peran pengguna; di mode ubah menampilkan semua peran dengan checkbox.
AC-05.2Minimal satu peran harus tetap terpilih.
AC-05.3Setiap kartu peran bisa diperluas untuk melihat dan mencari hak aksesnya.

US-06 — Daftar dan filter pengguna (P0)

Sebagai owner, saya ingin melihat dan menyaring pengguna, agar mudah memeriksa siapa punya akses apa.

IDKriteria penerimaan
AC-06.1Kolom: nama, email (dengan ikon terverifikasi), peran, sebagai karyawan, sebagai pemasok, status.
AC-06.2Pencarian kata kunci; filter lanjutan status dan peran; paginasi.
AC-06.3Aksi baris: Lihat, Ubah, Hapus sesuai izin; hapus massal dari baris terpilih.

US-07 — Menghapus pengguna (P1)

Sebagai owner, saya ingin menghapus akun yang tidak diperlukan.

IDKriteria penerimaan
AC-07.1Hapus satuan dan massal memerlukan konfirmasi dan izin delete.
AC-07.2Bila BE menolak, pesan error tampil sebagai toast.

US-08 — Riwayat aktivitas (P2)

Sebagai auditor, saya ingin melihat log aktivitas pengguna.

IDKriteria penerimaan
AC-08.1Log tersedia untuk semua pengguna (di daftar) dan per pengguna (di detail), dengan filter event, pelaku, dan rentang tanggal.

7. Document Structure

Header (Profil)

FieldRequiredDefaultNotes
Nama PenggunaYaDari entitas (jika sumber entitas)Maks 20 karakter
EmailYaDari entitas (jika sumber entitas)Format valid, maks 50 karakter; email login
Status (is_active)YaBelum dipilih (buat)Aktif / Tidak Aktif
Email terverifikasi (email_verified_at)OtomatisDiisi setelah verifikasi
AvatarDiatur pengguna sendiri, tidak diubah di sini

Lines (Peran)

FieldRequiredDefaultNotes
Peran (role_ids)Ya, minimal 1Array id peran

8. Status Lifecycle

Pengguna punya dua status yang berdiri sendiri:

StatusLabel UIMeaningEditableNext status
is_active: trueAktifAkun boleh dipakaiYaTidak Aktif
is_active: falseTidak AktifAkun dinonaktifkanYaAktif
email_verified_at: null— (tanpa ikon)Email belum diverifikasiTerverifikasi
email_verified_at terisiIkon terverifikasiEmail sudah diverifikasiBelum terverifikasi (saat email diubah)

9. Permissions & Actions

Permissions

ActionPermissionSyarat tambahan
Lihat daftar dan log semua penggunasettings:user:list:any
Lihat detail penggunasettings:user:view:any
Buat penggunasettings:user:create:any
Ubah profil / email / peransettings:user:update:any
Hapus penggunasettings:user:delete:any

FE menyembunyikan aksi yang tidak diizinkan; BE tetap menolaknya.

10. Business Rules

Aturan bisnis adalah ketentuan yang berlaku di semua layar dan semua aksi, siapa pun yang melakukannya. FE memakainya sebagai validasi di form, BE memakainya sebagai sumber kebenaran; jika keduanya berbeda, perilaku BE yang dianggap benar dan FE menyesuaikan.

  • BR-01 Email pengguna adalah identitas login dan harus unik (validasi BE).
  • BR-02 Pengguna wajib memiliki minimal satu peran; hak akses efektif adalah gabungan hak akses semua perannya.
  • BR-03 Pengguna baru dan perubahan email wajib melalui verifikasi email; tautan verifikasi dibentuk dari url / verify_url yang dikirim FE ditambah token dari BE.
  • BR-04 Satu entitas maksimal punya satu akun pengguna; membuat dari entitas hanya bisa memakai entitas yang belum punya akun.
  • BR-05 Pengguna tidak aktif tidak boleh mengakses sistem (ditegakkan BE saat login/refresh).
  • BR-06 Admin tidak mengatur password pengguna di halaman ini; cara pengguna baru mendapatkan password pertama ditentukan alur auth/BE.
  • BR-07 Setiap perubahan dicatat di log aktivitas.

11. Edge Cases

Edge case adalah kondisi yang jarang terjadi tetapi pasti muncul di operasional nyata. Perilaku yang diharapkan ditetapkan di sini agar tidak diputuskan sendiri-sendiri saat implementasi.

IDCaseExpected behavior
EC-01Email sudah dipakai pengguna lainDitolak BE; error tampil pada field email
EC-02Pengguna tidak menerima email verifikasiBelum ada tombol kirim ulang di halaman ini; admin bisa menyimpan ulang email, atau pengguna meminta kirim ulang dari alur auth
EC-03Admin mengubah email penggunaTautan verifikasi mengarah ke /auth/verify-email (alur verifikasi akun baru), berbeda dengan ubah email dari Akun Saya yang memakai /auth/change-verify-email; BE harus menerima token ini di endpoint yang benar
EC-04Admin menonaktifkan, menghapus, atau mencabut peran akunnya sendiriFE tidak mencegah; BE harus menolak agar admin tidak mengunci dirinya sendiri
EC-05Menghapus peran terakhir yang memberi akses Settings ke semua adminDitentukan BE (lihat PRD Roles)
EC-06Nama pengguna lebih dari 20 karakterDitolak FE; pesan error saat ini menyebut “maks 50” dan perlu diselaraskan
EC-07Pengguna dinonaktifkan saat sedang loginSesi berakhir saat token berikutnya diperbarui (ditentukan BE)

12. API Contract

ActionMethodEndpointRef
Daftar pengguna (paginasi, cari, filter)GET/api/users/paginateUS-06
Daftar pengguna (cursor)GET/api/users/cursor
Detail penggunaGET/api/users/:idUS-03
Buat pengguna dari awalPOST/api/usersUS-01
Buat pengguna dari entitasPOST/api/users/by-partyUS-02
Ubah profil (nama, status)PATCH/api/users/:idUS-03
Ubah peranPATCH/api/users/:id/rolesUS-05
Ubah email (kirim verifikasi)POST/api/users/:id/email/changeUS-04
Hapus penggunaDELETE/api/users/:idUS-07
Hapus pengguna massalDELETE/api/users/bulkUS-07
Log aktivitas semua penggunaGET/api/users/activity-logs/cursorUS-08
Log aktivitas satu penggunaGET/api/users/:id/activity-logs/cursorUS-08
Semua peran beserta hak aksesGET/api/roles?is_with_permission=trueUS-05
Entitas tanpa pengguna (filter: doesnt_have=user)GET/api/parties/paginateUS-02
Verifikasi email (halaman auth)POST/api/auth/email/verifyBR-03

13. Dependencies

PRD terkait

  • Roles & Permissions — peran dan hak akses pengguna.
  • Entities — identitas pengguna dan sinkronisasi dengan karyawan/pemasok.
  • Employees — pengguna yang terhubung ke karyawan bertindak sebagai karyawan di transaksi.
  • Auth (login, verifikasi email, lupa/reset password) — di luar Settings.
  • Activity Logs — sumber log aktivitas.

Efek ke modul lain

  • Hak akses pengguna menentukan menu sidebar yang tampil dan aksi yang tersedia di semua modul.
  • Pengguna adalah pelaku (actor) yang tercatat di semua log aktivitas.
Last updated on