Skip to content

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)
SkemaPermission → Resource → Module → Application (auto-create dari slug resource:action)slug + name + description langsung
ABAC dinamis (Rule)YaTidak
Cocok untukIAM server yang mengelola banyak app/module sekaligusApp yang cuma butuh RBAC lokal untuk dirinya sendiri
ModelPermission, RolePermission, Resource, Action, Module, Application, RuleSimplePermission, SimpleRolePermission, SimpleUserPermissionOverride
CompilerCore\Iam\PermissionCompilerServiceCore\Iam\SimplePermissionCompilerService
ControllerCore\Iam\Http\{User,Role,Permission}ControllerCore\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

  1. Salin migrasi ke project: database/migrations/20260101000000_iam_rbac_schema.php (wajib) + 20260101000001_iam_simple_permission_schema.php (kalau pilih varian ringan) ke db/migrations/, jalankan composer migrate.

  2. Subclass controller di app Anda supaya kena discovery routing (app/Modules/*/Controller.php) — anotasi @routeGroup/@middleware HARUS dideklarasikan ulang di subclass, docblock class TIDAK diwarisi lewat PHP reflection (beda dengan docblock method yang tidak di-override):

    php
    namespace App\Modules\Iam\User;
    
    /**
     * @routeGroup("/user")
     * @middleware("SessionAuth")
     */
    class Controller extends \Core\Iam\Http\UserController {}
  3. Isi app/config/iam.php dengan public key IAM server kalau app ini jadi client (lewat IamAuth), atau jalankan Core\Iam\PermissionCompilerService di endpoint /api/v1/sdk/authorize kalau 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 login

Verifikasi token selalu pakai public key yang di-inject di constructor — tidak pernah baca/generate keypair lokal, supaya aman dipakai app client mana pun.