Lewati ke konten utama

Manajemen Role, Menu Navigasi & Hak Akses (RBAC & ACL)

Modul Keamanan & Otorisasi memberikan kendali menyeluruh kepada Administrator (Administrator Perusahaan dan Administrator Platform) untuk merancang struktur wewenang, membatasi akses menu navigasi antarmuka, menetapkan izin operasi per modul bisnis, hingga menyaring baris data antar cabang.


1. Arsitektur Otorisasi 3 Lapis

Sistem Git Demo ERP menerapkan arsitektur otorisasi tiga lapis yang independen dan saling melengkapi:

  1. Lapis 1 — Menu Navigasi Sidebar (Tampilan Antarmuka):
    • Mengatur menu apa saja yang tampil pada bilah navigasi (sidebar) aplikasi web bagi pengguna.
    • Menerapkan prinsip Proteksi Awal (Default-Deny): Role baru tidak dapat melihat menu apa pun hingga administrator mencentang menu yang diizinkan.
  2. Lapis 2 — Izin Operasi Modul (Hak Akses Data & Fitur):
    • Mengatur wewenang operasi data: melihat (Read), menambah (Create), mengubah (Update), dan menghapus (Delete) pada setiap modul bisnis.
    • Mendukung pengaturan menyeluruh (Wildcard *) untuk mempermudah pemberian izin secara cepat dan terpadu.
  3. Lapis 3 — Pembatasan Baris Data (Penyaringan Data & Wilayah Cabang):
    • Menyaring baris data spesifik yang boleh diakses oleh pengguna (misalnya memastikan staf kasir hanya dapat melihat transaksi di cabang tempat ia ditugaskan).

2. Tingkatan Peran Pengguna (Hierarki Wewenang)

Setiap peran (role) dikelompokkan ke dalam tingkatan wewenang untuk menjaga pemisahan tanggung jawab (segregation of duties) dan tata kelola enterprise:

Tingkat WewenangKlasifikasi PeranCakupan Tingkat Sistem (Admin Scope)Contoh PeranCakupan Kewenangan Utama
Administrator PlatformPengelola Sistem UtamaSYSTEMADMINAkses global untuk konfigurasi sistem pusat, pendaftaran perusahaan/tenant baru, dan pemeliharaan platform.
Administrator PerusahaanAdministrator BisnisTENANTADMIN_TENANTAkses penuh di tingkat perusahaan aktif. Berwenang mengelola pengguna, cabang, peran, alur approval, dan notifikasi bisnis.
Supervisor & Operasional TokoPengguna Fungsional TerarahNONEPOS_ADMIN, CASHIERHak akses operasional retail toko fisik dan gudang sesuai tugas harian meja kasir atau pengawasan shift.
Pengguna Umum / KustomPeran Baca / Peran KustomNONEUSER, atau peran kustom (SALES, FINANCE, dll.)Akses baca umum (read-only) atau peran spesifik unit kerja yang dirancang mandiri oleh Administrator Perusahaan.
Pembedaan Peran Bawaan (Built-in) vs Peran Kustom (Custom)
  • Peran Bawaan Sistem (Built-in Provisioned Roles): Saat perusahaan baru didaftarkan, sistem secara otomatis membekali 4 peran operasional yang telah terpasang hak aksesnya: ADMIN_TENANT, POS_ADMIN, CASHIER, dan USER.
  • Peran Kustom (Custom Roles): Peran fungsional tambahan seperti SALES, PURCHASING, FINANCE, atau WAREHOUSE_STAFF bukan peran bawaan otomatis, melainkan contoh peran kustom yang dapat dibuat secara fleksibel oleh Administrator Perusahaan melalui panduan di Bagian 3.

3. Matriks Hak Akses & Batasan Peran Bawaan (Admin Tenant ke Bawah)

Untuk memudahkan tata kelola wewenang di lapangan, sistem menetapkan matriks izin bawaan bagi setiap peran operasional perusahaan:

Peran (Role Code)Lingkup AdminMenu Navigasi Bawaan (Sidebar)Izin Operasi Modul (ACL CRUD)Batasan Keamanan & Fitur Khusus
ADMIN_TENANT
(Administrator Perusahaan)
TENANT57 Menu Lengkap Perusahaan:
• Dashboard Eksekutif (/)
• Seluruh Menu Master Data
• Seluruh Menu Transaksi
• Modul Pengaturan (User, Role, Cabang, Rule, Approval, Notifikasi, Profil Perusahaan)
• Seluruh Laporan Keuangan
Akses Penuh (*, *)
Memiliki hak CREATE, READ, UPDATE, DELETE ke seluruh modul bisnis perusahaan.
Isolasi Batas Perusahaan: Terisolasi mutlak dari data perusahaan lain.
Proteksi Level Platform: Tidak dapat mengakses/mengubah resource Tenant atau GlobalParameter yang diproteksi SYSTEM (D40).
• Tidak dapat mengeskalasi diri menjadi superadmin platform.
POS_ADMIN
(Supervisor POS & Operasional Toko)
NONEOperasional Toko & Logistik:
• Beranda Dashboard (/)
• Kasir POS (/pos)
• Penjualan v2 (/sales-orders-v2)
• Lokasi Stok & Kartu Mutasi
• Cek On-Hand Stok (/inventory/on-hand)
• Transfer Stok Antar Gudang (/inventory/transfer)
• Pembelian Barang (PurchaseOrder)
• Pengeluaran Biaya Kas (Expense)
• Laporan Laba Harian (/reports/daily-profit)
Akses Penuh Operasional Toko (*):
CashRegister, CashSession, PosReceipt, PosDiscountPolicy, SalesOrder, SalesReturn, Payment, StockPicking, StockMove, InventoryAdjustment, PurchaseOrder, Expense, Assembly.

Hanya Baca (READ) Master Data:
Product, ProductCategory, Uom, PaymentMethod, Currency, Branch, Employee, Position.
Wewenang Void Struk Belanja: Berhak membatalkan nota belanja resmi (POST /api/pos/receipts/:id/void) saat terjadi galat kasir.
Otorisasi Plafon Diskon: Berhak menyetujui diskon khusus bila kasir melebihi plafon wewenang standar.
Approval Selisih Kas (Variance): Memverifikasi dan menyetujui tutup shift kasir jika terdapat selisih uang fisik tekor/lebih.
Batas Laporan Keuangan: Hanya berhak melihat Laporan Laba Harian Cabang (/reports/daily-profit); dilarang membuka Laporan Laba Rugi Komprehensif (/reports/profit-loss - 403).
CASHIER
(Staf Kasir Meja Transaksi)
NONELayar Transaksi Kasir:
• Kasir POS (/pos)
• Penjualan v2 (/sales-orders-v2)

(Catatan: Menu Beranda / sengaja tidak diberikan demi fokus meja kasir)
Hanya Buat, Baca, Ubah (CREATE, READ, UPDATE):
SalesOrder, OrderLine, Payment, CashSession, SalesReturn, StockPicking, StockMove, Entity (Pelanggan).

Hanya Baca (READ) Master & Struk:
PosReceipt, Product, ProductCategory, ProductPackaging, StockLocation, CashRegister, PosDiscountPolicy, PaymentMethod, Uom.
Prinsip Tanpa Izin Hapus (Zero Delete): Kasir sama sekali tidak memiliki izin DELETE untuk mencegah kecurangan dan penghapusan jejak audit.
Struk Belanja Read-Only: Kasir hanya berhak mencetak ulang nota (reprint), tidak dapat mem-void atau membatalkan nota yang sah.
Isolasi Kepemilikan Sesi (Session Ownership): Kasir hanya dapat melayani transaksi pada sesi kasir miliknya sendiri.
Plafon Diskon Kasir: Dibatasi oleh aturan diskon toko (PosDiscountPolicy). Diskon di luar plafon membutuhkan PIN supervisor.
Halaman Awal Kasir: Login langsung mengarah ke terminal kasir (/pos). Akses ke Dashboard ringkasan eksekutif diblokir otomatis (403).
USER
(Staf Monitoring / Akses Baca)
NONEMenu Monitoring Dasar:
• Beranda Dashboard (/)
• Penjualan v2 (/sales-orders-v2)
• Master Produk (/products)
Hanya Baca Seluruh Data (*, READ)
Dapat melihat seluruh transaksi dan katalog produk tanpa izin modifikasi.
Read-Only Penuh: Tidak memiliki hak CREATE, UPDATE, maupun DELETE. Cocok untuk auditor internal atau staf magang yang hanya perlu memantau data.
Penulisan Kode Peran

Pada antarmuka sistem, kode peran selalu ditampilkan dan diinput secara ringkas dalam huruf kapital (misalnya: ADMIN_TENANT, POS_ADMIN, CASHIER, USER).


4. Tata Cara Membuat Role Baru

Untuk menambahkan peran baru ke dalam perusahaan:

  1. Masuk sebagai Administrator Perusahaan (ADMIN_TENANT) atau Administrator Platform (ADMIN).
  2. Buka menu Pengaturan > Role / Peran (/roles).
  3. Klik tombol + Tambah Role Baru di sudut kanan atas.
  4. Isi formulir pembuatan role:
    • Code: Kode unik peran (misal: SALES_SPV, AUDITOR, CHIEF_CASHIER). Input huruf kecil akan otomatis dikonversi menjadi huruf kapital.
    • Description: Keterangan fungsi dan tanggung jawab pemegang peran tersebut.
  5. Klik Simpan. Sistem akan membuat role baru dalam status awal (clean slate) di perusahaan aktif Anda.

5. Panduan Konfigurasi 4 Tab Role Editor

Setelah role dibuat, klik baris role tersebut lalu pilih tombol Edit (atau buka /roles/:id/edit). Anda akan diarahkan ke formulir konfigurasi terpadu dengan 4 tab:

Tab 1: General (Identitas Role)

  • Menampilkan dan memperbarui deskripsi peran.
  • Kode role yang telah tersimpan tidak dapat diubah kembali untuk menjaga integritas relasi data dan sesi login yang sedang aktif.

Tab 2: Hak Akses Menu Navigasi

Tab ini adalah satu-satunya penentu utama (single source of truth) menu yang muncul di sidebar navigasi pengguna:

  • Pohon Menu Lengkap: Seluruh menu aktif maupun non-aktif ditampilkan dalam struktur hierarki (induk dan anak).
  • Auto-Closure Induk: Jika Anda mencentang salah satu submenu (anak), menu induknya secara otomatis ikut tercentang agar navigasi dapat terbuka di antarmuka pengguna.
  • Indikator Tri-State: Jika hanya sebagian submenu yang dipilih, kotak centang menu induk akan menampilkan tanda strip (indeterminate/tri-state).
  • Pencegahan Konflik Pembaruan Bersamaan: Sistem memantau nomor revisi konfigurasi. Jika ada administrator lain yang memperbarui menu pada waktu yang bersamaan, sistem akan mendeteksi konflik dan meminta Anda memuat ulang konfigurasi terbaru untuk mencegah penimpaan data secara tidak sengaja.
  • Pencegahan Menu Kosong: Pengguna dengan role yang belum memiliki centang menu sama sekali akan melihat sidebar kosong saat login.

Tab 3: Aturan Pembatasan Baris Data (Penyaringan Data / Cabang)

Tab ini digunakan untuk menambahkan batasan baris data (row-level filter) khusus untuk pemegang role ini:

  • Aturan Global vs Per-Role: Menampilkan daftar aturan global (berlaku untuk semua pengguna) serta aturan khusus yang melekat pada role ini.
  • Penyusun Kondisi Filter (Condition Builder): Tentukan kriteria filter data (misalnya membatasi pembacaan data transaksi hanya pada cabang penugasan pengguna).
  • Prioritas Penerapan: Menentukan urutan evaluasi aturan dan apakah aturan tersebut juga membatasi akun administrator perusahaan.

Tab 4: Matriks Izin Operasi Modul (Hak Akses Fitur & Data)

Tab ini menyediakan matriks visual untuk mengatur hak operasi pada setiap modul sistem:

  • Baris Modul & Kolom Aksi: Setiap modul (seperti Pesanan Penjualan / SalesOrder, Pesanan Pembelian / PurchaseOrder, Produk / Product, Transfer Stok / StockTransfer) memiliki 4 kolom aksi: Lihat (READ), Buat (CREATE), Ubah (UPDATE), dan Hapus (DELETE).
  • Dukungan Izin Menyeluruh (Wildcard *):
    • Baris teratas bertanda * (Semua Modul): Mengaktifkan kolom READ di baris ini akan memberikan izin baca ke seluruh modul data master dan transaksi.
    • Kolom * pada baris modul tertentu: Memberikan izin penuh (seluruh aksi) pada modul tersebut.
  • Pewarisan Visual (Inheritance via *): Aksi yang diizinkan melalui wildcard akan tampil tercentang secara otomatis dan diberi label penanda "via *".

6. Hal Penting yang Perlu Diperhatikan

  1. Prinsip Proteksi Awal (Default-Deny):
    • Role yang baru dibuat belum memiliki izin apa pun. Administrator wajib mengatur Tab Hak Akses Menu Navigasi (agar pengguna bisa membuka menu di sidebar) dan Tab Matriks Izin Operasi Modul (agar pengguna diizinkan memproses data).
  2. Kombinasi Multi-Role Pengguna:
    • Pengguna dapat diberikan lebih dari satu role sekaligus (misal: CASHIER dan INVENTORY_STAFF). Hak akses menu dan izin operasi modul yang diperoleh adalah gabungan (union) dari seluruh role tersebut.
  3. Pengguna Tanpa Role:
    • Akun pengguna yang tidak ditugaskan ke role mana pun tetap dapat login, namun akan melihat bilah navigasi kosong dan seluruh operasi data akan ditolak demi keamanan.
  4. Pembedaan Role vs Hak Persetujuan Transaksi (Approver):
    • Persetujuan dokumen transaksi (seperti Pesanan Penjualan, Pesanan Pembelian, Pengeluaran Biaya) tidak ditentukan oleh Role, melainkan oleh Jabatan Karyawan pada modul SDM/Kepegawaian. Menetapkan role manajerial pada pengguna tidak otomatis menjadikannya pejabat penyetuju (approver).
  5. Halaman Awal (Landing Page) & Akses Dashboard Eksekutif:
    • Secara desain keamanan sistem, peran staf kasir (CASHIER) tidak diberikan menu Beranda (/) dan akses ke ringkasan eksekutif Dashboard sengaja diblokir (HTTP 403 Access Denied). Saat kasir login, antarmuka langsung membuka layar operasional Kasir POS (/pos). Peran POS_ADMIN dan ADMIN_TENANT tetap memiliki akses penuh ke Beranda Dashboard.

7. Fitur Proteksi Keamanan & Integritas Data

Sistem Git Demo ERP dilengkapi dengan serangkaian mekanisme proteksi otomatis yang sengaja dirancang untuk menjaga integritas data, mencegah kesalahan operasional, dan melindungi keamanan akses perusahaan:

NoFitur Proteksi & PengamananManfaat & Cara Kerja Perlindungan bagi Perusahaan
1Proteksi Peran Utama PlatformPeran administrator utama (ADMIN) dilindungi secara permanen dari perubahan nama, modifikasi hak akses, atau penghapusan. Hal ini menjamin bahwa akses darurat dan kontrol pemeliharaan platform selalu tersedia serta tidak dapat terkunci tanpa sengaja.
2Pencegahan Duplikasi & Konflik Nama PeranSistem melarang pembuatan peran bisnis baru yang menggunakan nama atau kode khusus yang telah dicadangkan untuk administrasi sistem (seperti ADMIN, SYSTEM_ADMIN, atau TENANT_ADMIN). Hal ini mencegah kerancuan wewenang dan potensi celah keamanan antar tingkatan administrator.
3Pencegahan Penghapusan Peran yang Sedang DigunakanPeran yang masih aktif ditugaskan kepada staf dilindungi dari penghapusan. Administrator harus mencabut penugasan peran tersebut dari seluruh akun pengguna terlebih dahulu. Fitur ini melindungi staf operasional dari kehilangan akses mendadak yang dapat menghentikan proses transaksi bisnis.
4Pencegahan Perubahan Tingkatan Peran Secara LiarTingkatan peran (antara peran operasional bisnis dan administrator sistem) tidak dapat diubah sembarangan setelah dibuat. Kebijakan ini memastikan struktur hierarki keamanan organisasi tetap konsisten dan terkelola dengan tertib.
5Isolasi Batas Wewenang Administrator PerusahaanAdministrator Perusahaan hanya berwenang mengelola peran bisnis di perusahaannya sendiri. Sistem secara otomatis mencegah upaya peningkatan wewenang ke tingkat platform serta melindungi akun milik Administrator Platform dari modifikasi yang tidak sah.