fbpkg / laravel-rbac
A lightweight and flexible RBAC package for Laravel.
Requires
- php: ^8.2
- illuminate/auth: ^11.0|^12.0
- illuminate/contracts: ^11.0|^12.0
- illuminate/database: ^11.0|^12.0
- illuminate/support: ^11.0|^12.0
Requires (Dev)
- laravel/pint: ^1.20
- orchestra/testbench: ^9.0|^10.0
- phpunit/phpunit: ^11.0
This package is not auto-updated.
Last update: 2026-08-14 12:18:09 UTC
README
A lightweight, framework-friendly Role-Based Access Control (RBAC) package for Laravel.
Designed for projects that need a simple, flexible and extensible authorization layer based on Roles and Permissions, without unnecessary complexity.
Features
- Role and Permission management
- Polymorphic role assignments
- Full-access roles
- Route middleware for roles and permissions
- Configurable models
- Configurable table names
- Laravel 11 & 12 support
- PHP 8.2+
Requirements
- PHP 8.2+
- Laravel 11.x / 12.x
Installation
Install the package using Composer.
composer require fbpkg/laravel-rbac
Configuration
Publish the configuration file to customize the package.
php artisan vendor:publish --tag=rbac-config
Available options include:
- Role model
- Permission model
- Database table names
Database
Publish the migration.
php artisan vendor:publish --tag=rbac-migrations
Run the migration.
php artisan migrate
Usage
Add the HasRoles trait
use Fbpkg\Rbac\Traits\HasRoles; class User extends Authenticatable { use HasRoles; }
Create a role
use Fbpkg\Rbac\Models\Role; Role::create([ 'name' => 'admin', 'display_name' => 'Administrator', ]);
Create a role with unrestricted access.
Role::create([ 'name' => 'developer', 'display_name' => 'Developer', 'has_full_access' => true, ]);
Create a permission
use Fbpkg\Rbac\Models\Permission; Permission::create([ 'name' => 'users.create', 'display_name' => 'Create Users', ]);
Assign roles
$user->assignRole('admin');
Assign multiple roles.
$user->assignRole( 'admin', 'manager' );
Synchronize roles.
$user->syncRoles( 'manager' );
Remove roles.
$user->removeRole( 'manager' );
Check roles
$user->hasRole('admin'); $user->hasAnyRole( 'admin', 'manager' ); $user->hasAllRoles( 'admin', 'manager' );
Assign permissions
$role->assignPermission( 'users.create' );
Assign multiple permissions.
$role->assignPermission( 'users.create', 'users.edit' );
Synchronize permissions.
$role->syncPermissions( 'users.create' );
Remove permissions.
$role->removePermission( 'users.edit' );
Check permissions
$user->hasPermission( 'users.create' ); $user->hasAnyPermission( 'users.create', 'users.edit' ); $user->hasAllPermissions( 'users.create', 'users.edit' );
Full Access Roles
Roles with the has_full_access flag automatically bypass all permission checks.
This is useful for roles such as Developer, Owner, or other privileged system accounts.
Route Middleware
Protect routes by role.
Route::middleware('role:admin')->group(function () { // });
Protect routes by permission.
Route::middleware('permission:users.create')->group(function () { // });
License
This package is open-sourced software licensed under the MIT License.