PHP code example of modularize-rbac / laravel
1. Go to this page and download the library: Download modularize-rbac/laravel library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
modularize-rbac / laravel example snippets
// app/Models/User.php
use ModularizeRbac\Laravel\Concerns\HasAccessPermissions;
class User extends Authenticatable
{
use HasAccessPermissions;
}
// database/seeders/DatabaseSeeder.php (or a tinker session)
use ModularizeRbac\Core\Application\Module\CreateModule\CreateModule;
use ModularizeRbac\Core\Application\Module\CreateModule\CreateModuleInput;
use ModularizeRbac\Core\Application\Role\CreateRole\CreateRole;
use ModularizeRbac\Core\Application\Role\CreateRoleInput;
use ModularizeRbac\Core\Application\RoleModulePermission\SyncRoleModules\SyncRoleModules;
use ModularizeRbac\Core\Application\RoleModulePermission\SyncRoleModules\SyncRoleModulesInput;
$module = app(CreateModule::class)->execute(new CreateModuleInput(
slug: 'events',
name: 'Events',
redirect: '/events',
icon: 'calendar',
rootModuleId: null,
sortOrder: 10,
));
$role = app(CreateRole::class)->execute(new CreateRoleInput(
name: 'event_viewer',
displayName: 'Event Viewer',
guardName: 'web',
level: 100,
));
app(SyncRoleModules::class)->execute(new SyncRoleModulesInput(
roleId: $role->id,
modules: [
['module_id' => $module->id, 'is_reading_allowed' => true],
],
));
DB::table('role_user')->insert([
'role_id' => $role->id,
'user_id' => 1,
'organization_id' => null,
'created_at' => now(),
'updated_at' => now(),
]);
// In any controller / Gate / Blade
if ($request->user()->can('events.view')) {
// ✓ allowed via role_user → role_module_permission → module
}
'guards' => [
'admin' => [
'driver' => 'sanctum',
'provider' => 'admin_users',
],
],
use ModularizeRbac\Laravel\Concerns\HasAccessPermissions;
class User extends Authenticatable
{
use HasAccessPermissions;
}
$app->instance('access.current_tenant_id', (string) $request->user()->organization_id);
// config/access.php
'spatie' => [
'enabled' => null, // null = auto, true = force on, false = force off
],
use ModularizeRbac\Core\Application\Module\CreateModule\CreateModule;
use ModularizeRbac\Core\Application\Module\CreateModule\CreateModuleInput;
$module = app(CreateModule::class)->execute(new CreateModuleInput(
slug: 'billing',
name: 'Billing',
redirect: '/billing',
icon: 'receipt',
rootModuleId: null,
sortOrder: 10,
));
// app/Providers/EventServiceProvider.php
use ModularizeRbac\Laravel\Events\Telemetry\AbilityResolved;
use Sentry\State\Scope;
Event::listen(AbilityResolved::class, function (AbilityResolved $e): void {
\Sentry\configureScope(function (Scope $scope) use ($e): void {
$scope->setExtra('rbac.ability', $e->ability);
$scope->setExtra('rbac.source', $e->source);
$scope->setExtra('rbac.duration_us', $e->durationMicros);
});
if ($e->durationMicros > 10_000) {
\Sentry\captureMessage('Slow access check', \Sentry\Severity::warning());
}
});
use ModularizeRbac\Laravel\Events\Telemetry\AbilityResolved;
use ModularizeRbac\Laravel\Events\Telemetry\CacheLookup;
use Spatie\Prometheus\Facades\Prometheus;
Event::listen(AbilityResolved::class, function (AbilityResolved $e): void {
Prometheus::addHistogram('access_check_duration_us')
->labels(['source', 'allowed'])
->observe($e->durationMicros, [$e->source, $e->allowed ? '1' : '0']);
});
Event::listen(CacheLookup::class, function (CacheLookup $e): void {
Prometheus::addCounter('access_cache_lookups_total')
->labels(['namespace', 'hit'])
->incBy(1, [$e->namespace, $e->hit ? '1' : '0']);
});
use Illuminate\Support\Facades\Log;
use ModularizeRbac\Laravel\Events\Telemetry\AbilityResolved;
Event::listen(AbilityResolved::class, function (AbilityResolved $e): void {
Log::channel('telemetry')->info('rbac.ability.resolved', [
'ability' => $e->ability,
'allowed' => $e->allowed,
'source' => $e->source,
'duration_us' => $e->durationMicros,
]);
});
// config/access.php
'audit' => [
'enabled' => true,
'log_failures' => 'error', // warning (default) | error | critical | false
],
bash
composer vendor:publish --tag=access-config
php artisan migrate
# Optional: get an example seeder you can edit + run
php artisan vendor:publish --tag=access-seeder
php artisan db:seed --class=AccessSeeder
bash
composer vendor:publish --tag=access-config
php artisan migrate