Skip to content

Commit d7a7c4a

Browse files
committed
Handle non-JSON requests in auth middlewares
Updated PermissionMiddleware and RoleMiddleware to return a JSON response only if the request expects JSON. For non-JSON requests, the middlewares now abort with a 403 error and a relevant message. This improves compatibility with web and API clients.
1 parent bbfd693 commit d7a7c4a

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

src/Http/Middleware/PermissionMiddleware.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,14 @@ public function handle(Request $request, Closure $next, string $permission): Res
2222
{
2323
$user = Auth::user();
2424
if (! $user || ! $user->hasPermissionTo($permission)) {
25-
return response()->json([
26-
'error' => 'forbidden',
27-
'message' => "User does not have required permission: {$permission}",
28-
'status' => Response::HTTP_FORBIDDEN,
29-
], Response::HTTP_FORBIDDEN);
25+
if ($request->expectsJson()) {
26+
return response()->json([
27+
'error' => 'forbidden',
28+
'message' => "User does not have required permission: {$permission}",
29+
'status' => Response::HTTP_FORBIDDEN,
30+
], Response::HTTP_FORBIDDEN);
31+
}
32+
abort(Response::HTTP_FORBIDDEN, "User does not have required permission: {$permission}");
3033
}
3134
return $next($request);
3235
}

src/Http/Middleware/RoleMiddleware.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,14 @@ public function handle(Request $request, Closure $next, string $role): Response
2222
{
2323
$user = Auth::user();
2424
if (! $user || ! $user->hasRole($role)) {
25-
return response()->json([
26-
'error' => 'forbidden',
27-
'message' => "User does not have required role: {$role}",
28-
'status' => Response::HTTP_FORBIDDEN,
29-
], Response::HTTP_FORBIDDEN);
25+
if ($request->expectsJson()) {
26+
return response()->json([
27+
'error' => 'forbidden',
28+
'message' => "User does not have required role: {$role}",
29+
'status' => Response::HTTP_FORBIDDEN,
30+
], Response::HTTP_FORBIDDEN);
31+
}
32+
abort(Response::HTTP_FORBIDDEN, "User does not have required role: {$role}");
3033
}
3134
return $next($request);
3235
}

0 commit comments

Comments
 (0)