Как авторизовать пользователя, владеющего ресурсом, с помощью API через промежуточное программное обеспечение в Laravel?

#laravel #laravel-passport

#laravel #laravel-passport

Вопрос:

Мне нужно проверить, разрешено ли пользователю просматривать ресурс. Запрос отправляется 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

Ответ №1:

Не могли бы вы, пожалуйста, попробовать это и дать мне знать, если это устранит вашу проблему.

Перейдите в папку App Exceptions и добавьте следующее в верхней части Handler.php файл:

 use IlluminateAuthAccessAuthorizationException;
  

добавьте следующее в массив $dontReport в том же файле:

 IlluminateAuthAccessAuthorizationException::class,
  

и последний шаг — настроить ответ на ошибку, добавив следующий код в функцию визуализации:

 if ($exception instanceof AuthorizationException) {
    return response()->json('unauthorized',403);
}
  

Комментарии:

1. Рад это слышать, точно так же вы можете обработать любое исключение ошибки и делать все, что захотите, если это произойдет. узнайте больше об обработке ошибок в документации laravel laravel.com/docs/5.8/errors