RBAC — Peran & Izin
Ringkasan
Sistem RBAC (Role-Based Access Control) mengelola semua otorisasi di platform Sutomo. Sistem ini dibangun di atas Spatie Permission dan diintegrasikan melalui Filament Shield. Setiap tindakan pengguna — melihat halaman, membuat catatan, mengedit pengaturan — diperiksa melalui gate izin.
Konsep Kunci
| Konsep | Deskripsi |
|---|---|
| Peran (Role) | Sekelompok izin bernama (misal: super_admin, admin, teacher, staff). Pengguna dapat diberikan satu atau lebih peran. |
| Izin (Permission) | Hak akses granular (misal: ViewGeneral:SystemSetting, EditCandidate:Candidate). |
| Guard | Guard auth yang menjadi lingkup izin (web untuk panel admin, api untuk API). |
| Super Admin | Melewati semua pemeriksaan izin. Didefinisikan melalui konfigurasi filament-shield.super_admin. |
Konvensi Penamaan Izin
Izin mengikuti konvensi:
{Action}{Resource}:{Module}| Bagian | Contoh | Deskripsi |
|---|---|---|
| Action | View, Create, Edit, Delete | Operasi yang diperiksa |
| Resource | General, Mail, Candidate | Fitur atau halaman yang diakses |
| Module | SystemSetting, Candidate | Lingkup modul (PascalCase) |
Contoh:
ViewGeneral:SystemSetting— Melihat halaman pengaturan umumEditMail:SystemSetting— Mengedit konfigurasi emailViewAny:Candidate— Menampilkan semua kandidatDelete:Candidate— Menghapus catatan kandidat
Diagram Alir — Pemeriksaan Izin
Diagram alir berikut mengilustrasikan bagaimana izin dievaluasi saat pengguna melakukan suatu tindakan:
Penjelasan:
- Saat pengguna mencoba melakukan tindakan, autentikasi diperiksa terlebih dahulu.
- Key izin di-resolve dari resource/halaman Filament (misal:
ViewGeneral:SystemSetting). - Middleware Filament Shield memeriksa gate otorisasi terhadap peran yang diberikan ke pengguna.
- Pengguna super admin melewati semua pemeriksaan izin.
- Akses yang tidak sah menghasilkan respons 403 Forbidden.
Diagram Alir Data
Level 1 — Sistem RBAC
Diagram Aktivitas — Siklus Hidup Penugasan Peran
Database
Entity Relationship Diagram
Tabel Kunci
| Tabel | Tujuan |
|---|---|
roles | Definisi peran bernama dengan guard |
permissions | Definisi izin granular dengan guard |
role_has_permissions | Memetakan izin mana yang dimiliki setiap peran |
model_has_roles | Memetakan peran mana yang diberikan ke setiap pengguna |
model_has_permissions | Penugasan izin langsung (jarang digunakan) |
File Kunci
app/
└── Filament/
└── Resources/
└── Candidates/
└── CandidateResource.php # Contoh: HasShieldPermissions
config/
├── permission.php # Konfigurasi Spatie Permission
└── filament-shield.php # Konfigurasi Filament Shield
└── Providers/
└── FilamentServiceProvider.php # Registrasi Shield