Я добавил пакет разрешений Saptie Laravel в приложение Laravel 5.8 API. Каждый работает нормально, и я получаю исключение, когда пользователь, не являющийся администратором, пытается получить доступ к конкретным маршрутам администратора.
Однако исключение по умолчанию отображается как HTML 403 User does not have the right roles
. Учитывая, что я использую это внутри приложения API, я хотел бы вернуть свое собственное сообщение для таких исключений.
Я попытался проверить, есть ли auth()->user()->hasRole('admin')
, но все же получил ту же страницу исключения по умолчанию. Вот мой код
маршрут
Route::post('products', 'ProductController@store')->middleware('role:super-admin|admin'); // create a new product
Метод контроллера
if (auth()->user()->hasRole('admin')) {
// create & store the product
$product = Product::create($request->all())
// return new product
$responseMessage = 'Successful operation';
$responseStatus = 200;
$productResource = new ProductResource($product);
return response()->json([
'responseMessage' => $responseMessage,
'responseStatus' => $responseStatus,
'product' => $productResource
]);
} else {
return response()->json([
'responseMessage' => 'You do not have required authorization.',
'responseStatus' => 403,
]);
}
Почему мое собственное сообщение не отображается?
UnauthorizedException
, защищали ли вы свои маршруты с помощью промежуточного программного обеспечения, например.role:admin
? Если да, то ваш контроллер никогда не достигается, поэтому ваш код никогда не запускается. - person Remul   schedule 03.09.2019role:admin
промежуточное ПО на маршруте. См. Отредактированный пост для маршрута. Если роль пользователя проверяется до попадания в контроллер, что мне делать, чтобы вернуть ответ json вместо рендеринга страницы html 403? - person Mena   schedule 03.09.2019