Appearance
Starter-kit IAM (RBAC/ABAC)
Dua varian model permission, pilih salah satu (tabel beda, tidak bisa dipakai bersamaan untuk permission yang sama):
Permission (taxonomy penuh) | SimplePermission (RBAC ringan) | |
|---|---|---|
| Skema | Permission → Resource → Module → Application (auto-create dari slug resource:action) | slug + name + description langsung |
ABAC dinamis (Rule) | Ya | Tidak |
| Cocok untuk | IAM server yang mengelola banyak app/module sekaligus | App yang cuma butuh RBAC lokal untuk dirinya sendiri |
| Model | Permission, RolePermission, Resource, Action, Module, Application, Rule | SimplePermission, SimpleRolePermission, SimpleUserPermissionOverride |
| Compiler | Core\Iam\PermissionCompilerService | Core\Iam\SimplePermissionCompilerService |
| Controller | Core\Iam\Http\{User,Role,Permission}Controller | Core\Iam\Http\{UserController (sama), SimpleRoleController, SimplePermissionController} |
Model bersama kedua varian: User, Role, UserRole, UserPermissionOverride (taxonomy)/SimpleUserPermissionOverride (ringan), VersionTag (cache-busting compiled permissions — di-bump lewat PHP model hook, bukan trigger DB, jadi portable ke MySQL/Postgres/SQL Server).
Setup
Salin migrasi ke project:
database/migrations/20260101000000_iam_rbac_schema.php(wajib) +20260101000001_iam_simple_permission_schema.php(kalau pilih varian ringan) kedb/migrations/, jalankancomposer migrate.Subclass controller di app Anda supaya kena discovery routing (
app/Modules/*/Controller.php) — anotasi@routeGroup/@middlewareHARUS dideklarasikan ulang di subclass, docblock class TIDAK diwarisi lewat PHP reflection (beda dengan docblock method yang tidak di-override):phpnamespace App\Modules\Iam\User; /** * @routeGroup("/user") * @middleware("SessionAuth") */ class Controller extends \Core\Iam\Http\UserController {}Isi
app/config/iam.phpdengan public key IAM server kalau app ini jadi client (lewatIamAuth), atau jalankanCore\Iam\PermissionCompilerServicedi endpoint/api/v1/sdk/authorizekalau app ini jadi server-nya.
Core\Iam\Sdk — client-side verifier
php
$sdk = new Core\Iam\Sdk($publicKeyBase64, $iamBaseUrl, $appId);
$sdk->can('invoice', 'approve', ['amount' => 15000]); // true/false, evaluasi ABAC lokal
$sdk->hasRole('manager');
$sdk->currentUser(); // klaim token, null kalau tidak loginVerifikasi token selalu pakai public key yang di-inject di constructor — tidak pernah baca/generate keypair lokal, supaya aman dipakai app client mana pun.