Route Middleware
Quick Summary: Laravel ACL provides middleware for checking user roles and permissions on routes.
Getting Started
Middleware provides route-level authorization checks. These middleware are automatically registered and available in your routes.
Role Middleware
role
Check if the user has the given role to access the route.
Parameters:
| Parameter | Type | Description |
|---|---|---|
$role |
string |
Role slug(s), use | to check multiple |
[!TIP] Use
|as a delimiter to check if the user has any of the specified roles.
Examples:
use Illuminate\Support\Facades\Route; // Single role checkRoute::get('/admin', function () { //})->middleware('role:administrator'); // Multiple roles (OR logic - user needs ANY of these roles)Route::get('/users', function () { //})->middleware('role:administrator|cashier');
Permission Middleware
permission
Check if the user has the given permission to access the route.
Parameters:
| Parameter | Type | Description |
|---|---|---|
$permission |
string |
Permission slug(s), use | to check multiple |
[!TIP] Use
|as a delimiter to check if the user has any of the specified permissions.
Examples:
use Illuminate\Support\Facades\Route; // Single permission checkRoute::get('/users', function () { //})->middleware('permission:users.view'); // Multiple permissions (OR logic - user needs ANY of these permissions)Route::get('/users', function () { //})->middleware('permission:users.view|users.create');
canAtLeast
Check if the user has at least one of the given permission(s) to access the route.
Parameters:
| Parameter | Type | Description |
|---|---|---|
$permissions |
string |
Permission slugs, comma-separated |
[!NOTE] Use comma-separated list for multiple permissions.
Example:
use Illuminate\Support\Facades\Route; // User needs at least one of these permissionsRoute::get('/users', function () { //})->middleware('canAtLeast:users.view,users.create');
Using Middleware Groups
[!INFO] You can also use these middleware in route groups for cleaner code.
Examples:
use Illuminate\Support\Facades\Route; // Role-based route groupRoute::middleware(['auth', 'role:administrator'])->group(function () { Route::get('/admin', function () { // });}); // Permission-based route groupRoute::middleware(['auth', 'permission:users.view'])->prefix('users')->group(function () { Route::get('/', function () { // });});
Quick Reference
[!TIP] Bookmark this section for a quick overview!
Middleware Reference
| Middleware | Parameter | Description |
|---|---|---|
role |
string |
Role slug(s), use | for multiple |
permission |
string |
Permission slug(s), use | for multiple |
canAtLeast |
string |
Permission slugs, comma-separated |
Usage Examples
// Role checks->middleware('role:admin')->middleware('role:admin|moderator') // Permission checks->middleware('permission:users.view')->middleware('permission:users.view|users.create') // Can at least (any permission)->middleware('canAtLeast:users.view,users.create')