我需要检查是否允许用户查看资源。请求由API发送,并通过auth:api
中间件传递。我正在使用Laravel 5.8
我试图在路由声明中使用中间件,如下所示:
Route::get('/user/{id}', 'UserController@get')->middleware('can:view,user')
或在方法的控制器代码中如下:
$user = Auth::guard('api')->user();
$this->authorize('view', $user, $anotherUserModel);
这些方法中的每一个都可以让用户通过策略,即使它经过硬编码也可以阻止用户表单实现此目标或抛出错误:
{
"message": "This action is unauthorized.",
"exception": "Symfony\\Component\\HttpKernel\\Exception\\AccessDeniedHttpException",
"file": "C:\\xampp\\htdocs\\laravelapitest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Exceptions\\Handler.php",
"line": 202,
[...]
}
但是我希望用户应该停止并且响应代码应该是403
答案 0 :(得分:0)
请尝试一下,让我知道它是否可以解决您的问题。
转到 App \ Exceptions 文件夹,然后在 Handler.php 文件顶部添加以下内容:
use Illuminate\Auth\Access\AuthorizationException;
在同一文件的 $ dontReport 数组中添加以下内容:
\Illuminate\Auth\Access\AuthorizationException::class,
最后一步是通过在render函数中添加以下代码来自定义错误响应:
if ($exception instanceof AuthorizationException) {
return response()->json('unauthorized',403);
}