Skip to content

Commit 09e487b

Browse files
authored
New feat Middleware (#24)
2 parents eac6bef + 024c588 commit 09e487b

5 files changed

+44
-7
lines changed

README.md

+10-1
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,19 @@ if (hasRole('admin')) {
252252

253253
## Middleware Usage
254254

255+
255256
```php
256257
Route::group(['middleware' => ['role:admin,post-create']], function () {
257-
// Routes protected by role and permission
258+
// Routes protected by role and permissions
259+
});
260+
261+
Route::group(['middleware' => ['permissions:post-create']], function () {
262+
// Routes protected by permissions
258263
});
264+
265+
Route::post('/create-post', [PostController::class, 'create'])->name('post.create')->middleware('role:admin,post-create');
266+
Route::post('/create-post', [PostController::class, 'create'])->name('post.create')->middleware('permissions:post-create');
267+
259268
```
260269

261270
## How to Use Permissions Expiration
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace EragPermission\Middleware;
4+
5+
use Closure;
6+
use Illuminate\Http\Request;
7+
use Symfony\Component\HttpFoundation\Response;
8+
9+
class PermissionsMiddleware
10+
{
11+
/**
12+
* Handle an incoming request.
13+
*
14+
* @param Closure(Request): (Response) $next
15+
*/
16+
public function handle(Request $request, Closure $next, ...$permissions): Response
17+
{
18+
if (! $request->user()) {
19+
abort(403, 'Unauthorized action.');
20+
}
21+
22+
if (! $request->user()->hasPermissions($permissions)) {
23+
abort(403, 'You do not have the required permission.');
24+
}
25+
26+
return $next($request);
27+
}
28+
}

src/Middleware/RolePermissionMiddleware.php

+2-4
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ class RolePermissionMiddleware
1010
{
1111
/**
1212
* Handle an incoming request.
13-
*
14-
* @param Closure(Request): (Response) $next
1513
*/
1614
public function handle(Request $request, Closure $next, $role = null, $permission = null): Response
1715
{
@@ -20,10 +18,10 @@ public function handle(Request $request, Closure $next, $role = null, $permissio
2018
}
2119

2220
if (! $request->user()->hasRole($role)) {
23-
abort(404, 'Unauthorized action.');
21+
abort(403, 'You do not have the required role.');
2422
}
2523
if ($permission !== null && ! $request->user()->hasPermissions($permission)) {
26-
abort(404, 'Unauthorized action.');
24+
abort(403, 'You do not have the required permission.');
2725
}
2826

2927
return $next($request);

src/PermissionServiceProvider.php

+4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use EragPermission\Commands\UpgradeVersions;
77
use EragPermission\Contracts\PermissionContract;
88
use EragPermission\Contracts\RoleContract;
9+
use EragPermission\Middleware\PermissionsMiddleware;
910
use EragPermission\Middleware\RolePermissionMiddleware;
1011
use EragPermission\Models\Permission;
1112
use EragPermission\Models\Role;
@@ -54,6 +55,9 @@ public function boot(Router $router): void
5455
$router->aliasMiddleware('role', RolePermissionMiddleware::class);
5556
$router->middlewareGroup('role', [RolePermissionMiddleware::class]);
5657

58+
$router->aliasMiddleware('permissions', PermissionsMiddleware::class);
59+
$router->middlewareGroup('permissions', [PermissionsMiddleware::class]);
60+
5761
if (Schema::hasTable('users') && Schema::hasTable('roles') && Schema::hasTable('permissions')) {
5862
Permission::with('roles.users')->get()->each(function ($permission) {
5963
Gate::define($permission->name, function ($user) use ($permission) {

src/Traits/HasPermissionsTrait.php

-2
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,6 @@ public function hasPermissions(string|array $permissions): bool
9494

9595
public function hasPermissionThroughRole($permission): bool
9696
{
97-
$this->load('roles');
98-
9997
return $this->roles->pluck('id')->intersect($permission->roles->pluck('id'))->isNotEmpty();
10098
}
10199

0 commit comments

Comments
 (0)