Permission (RBAC) di Skalfa API

Skalfa API menyediakan utility permission berbasis feature dan access key untuk mengatur otorisasi secara eksplisit. Pendekatan ini ringan, mudah dibaca, dan fleksibel untuk kebutuhan API skala kecil hingga infra-grade backend.

Konsep Dasar Permission

Permission di Skalfa API dibangun menggunakan dua level utama: Feature dan Access. Feature merepresentasikan modul atau domain besar, sedangkan Access merepresentasikan aksi spesifik di dalam feature tersebut.

Struktur Key Permission

  • Feature Key — 3 digit angka (contoh: 100, 200)
  • Access Key — 2 digit angka (contoh: 01, 02)
  • Permission Key — Gabungan feature.access (contoh: 100.01)

Mendaftarkan Permission

Permission didefinisikan menggunakan permission.register. Setiap feature dapat memiliki beberapa akses dengan nama yang deskriptif.
Kode berhasil di copy!
5

Menggunakan Permission di Controller

Permission digunakan langsung di controller untuk membatasi akses endpoint. Jika permission tidak dimiliki user, request akan dihentikan dengan response 403.
Kode berhasil di copy!
5

Permission dengan Feature Default

Jika hanya menuliskan access key (tanpa feature), Skalfa API akan otomatis menggunakan feature default dari permission yang didaftarkan.
Kode berhasil di copy!
5

Menggabungkan Permission (OR)

Beberapa permission dapat digabung menggunakan orHave. Guard akan lolos jika salah satu permission dimiliki user.
Kode berhasil di copy!
5

Permission di ControllerContext

Daftar permission user tersedia di c.permissions. Data ini biasanya diisi oleh middleware auth setelah verifikasi token.
Kode berhasil di copy!
5

Mengambil Daftar Feature dan Access

Utility permission menyediakan helper untuk mengambil daftar feature dan akses dalam bentuk terstruktur. Umumnya digunakan untuk kebutuhan UI atau manajemen role.
Kode berhasil di copy!
5

Best Practice

Gunakan permission sebagai guard di controller, bukan di route. Jaga key permission tetap konsisten dan stabil. Hindari mengubah key karena akan berdampak ke data role yang sudah ada.