@@ -54,10 +54,11 @@ If you find Guard Laravel helpful, please consider **sponsoring** the project. Y
5454
5555- ** PHP 8.2, 8.3, 8.4, & 8.5 & Laravel 10, 11, & 12** - Modern PHP and Laravel features
5656- ** Role & Permission Management** - Create and manage roles with permissions
57+ - ** Separate Concerns** - Traits and contracts are properly separated for better maintainability
5758- ** Wildcard Permissions** - Use wildcard patterns like ` posts.* ` for flexible permission checking
5859- ** Permission Groups** - Organize permissions into groups
5960- ** Guarded Roles** - Protect certain roles from deletion/modification
60- - ** Custom Middleware ** - Built-in middleware for route protection
61+ - ** Multiple Roles/Permissions ** - Middleware now supports multiple roles/permissions at once
6162- ** Cache Support** - Intelligent caching with automatic invalidation
6263- ** Query Scopes** - Filter users by roles and permissions
6364- ** Custom Exceptions** - Better error messages
@@ -85,17 +86,19 @@ php artisan vendor:publish --tag="guard-migrations"
8586php artisan migrate
8687```
8788
88- Add the ` HasRoles ` trait and ` UserContract ` interface to your User model:
89+ Add the ` HasRoles ` trait and ` User ` interface to your User model:
8990
9091``` php
9192namespace App\Models;
9293
9394use AmdadulHaq\Guard\Contracts\User as UserContract;
94- use AmdadulHaq\Guard\HasRoles;
95+ use AmdadulHaq\Guard\Concerns\HasRoles;
96+ use AmdadulHaq\Guard\Concerns\HasPermissions;
9597
9698class User extends Authenticatable implements UserContract
9799{
98100 use HasRoles;
101+ use HasPermissions;
99102}
100103```
101104
@@ -276,13 +279,10 @@ $user->revokePermissionTo('posts.delete');
276279$user->revokeAllPermissions();
277280
278281// Check if user has direct permission
279- $user->hasDirectPermission('posts.create'); // true
280-
281- // Get all direct permissions for user
282- $user->getDirectPermissions(); // Collection of permissions
282+ $user->hasPermission('posts.create'); // true
283283
284284// Get all permissions (roles + direct)
285- $user->getAllPermissions (); // Collection of all permissions
285+ $user->getPermissions (); // Collection of all permissions
286286```
287287
288288### Checking Roles
@@ -347,20 +347,38 @@ User::withPermissions('users.create')->get();
347347
348348### Middleware
349349
350- Protect routes using built-in middleware:
350+ Protect routes using built-in middleware. All middlewares support multiple roles/permissions :
351351
352352``` php
353+ // Single permission
353354Route::middleware('permission:users.create')->group(function () {
354355 Route::post('/users', [UserController::class, 'store']);
355356});
356357
358+ // Multiple permissions (requires any of them)
359+ Route::middleware('permission:users.create,users.edit')->group(function () {
360+ Route::put('/users/{id}', [UserController::class, 'update']);
361+ });
362+
363+ // Single role
357364Route::middleware('role:administrator')->group(function () {
358365 Route::delete('/users/{id}', [UserController::class, 'destroy']);
359366});
360367
361- Route::middleware('role_or_permission:users.create')->group(function () {
368+ // Multiple roles (requires any of them)
369+ Route::middleware('role:admin,editor')->group(function () {
370+ Route::get('/admin', [AdminController::class, 'dashboard']);
371+ });
372+
373+ // Role OR permission
374+ Route::middleware('role_or_permission:admin,users.create')->group(function () {
362375 Route::get('/users', [UserController::class, 'index']);
363376});
377+
378+ // Multiple role_or_permission
379+ Route::middleware('role_or_permission:admin,editor,users.manage')->group(function () {
380+ Route::post('/manage', [Controller::class, 'handle']);
381+ });
364382```
365383
366384### Gate Integration
0 commit comments