Install via Composer:
composer require mateusjunges/laravel-acl:^4.2
Publish the package configuration and migrations:
php artisan vendor:publish --provider="MateusJunges\LaravelAcl\AclServiceProvider" --tag="config"
php artisan migrate
For Laravel 10 projects, ensure your phpunit.xml and composer.json reflect PHP 8.0+ requirements. The package now drops PHP 7.4 support.
First Use Case: Define a role and permission in a migration or seeder:
use MateusJunges\LaravelAcl\Models\Role;
use MateusJunges\LaravelAcl\Models\Permission;
// Create a role
$adminRole = Role::create(['name' => 'admin']);
// Assign permissions
$adminRole->permissions()->attach([
Permission::where('name', 'access_dashboard')->first(),
Permission::where('name', 'manage_users')->first(),
]);
Leverage middleware for route protection:
Route::middleware(['role:admin'])->group(function () {
Route::get('/admin/dashboard', [DashboardController::class, 'index']);
});
Use the can() helper or facade in controllers/views:
if (auth()->user()->can('manage_users')) {
// Grant access
}
Extend Laravel’s built-in policies with ACL:
use MateusJunges\LaravelAcl\Policies\AclPolicy;
class PostPolicy extends AclPolicy
{
public function update(User $user, Post $post)
{
return $user->can('edit_posts') || $user->id === $post->user_id;
}
}
Attach/detach permissions in bulk:
$role->permissions()->sync([1, 2, 3]); // Attach IDs 1, 2, 3
phpunit.xml to reflect PHP 8.0+ syntax (e.g., strict_types=1 in config).php artisan migrate to update the roles and permissions tables (schema changes may apply).Role::firstOrCreate() and Permission::firstOrCreate() to avoid duplicates.Cache::remember('user-permissions-' . auth()->id(), now()->addHours(1), function () {
return auth()->user()->permissions()->pluck('name');
});
dd(auth()->user()->roles->pluck('name'), auth()->user()->permissions->pluck('name'));
role: middleware is registered in app/Http/Kernel.php:
'role' => \MateusJunges\LaravelAcl\Middleware\RoleMiddleware::class,
AclServiceProvider to bind custom guards:
$this->app->bind('acl.guard', function () {
return new CustomGuard();
});
MateusJunges\LaravelAcl\Models\Permission to add custom fields (e.g., description).How can I help you explore Laravel packages today?