![](/img/trans.png)
[英]UUID Spatie/Laravel-Permission SyncPermission Not Working
[英]Customizing Spatie Laravel-Permission Exception Message
我在Laravel 5.8 API應用程序中添加了Saptie Laravel權限包 。 每個工作正常,當非管理員用戶嘗試訪問管理員特定路由時,我得到例外。
但是,默認異常將呈現為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,
]);
}
為什么我的自定義消息沒有顯示?
因為您通過role
中間件保護您的路由,所以在您到達控制器代碼之前將拋出UnauthorizedException
。
你可以做的是使用laravels異常處理程序render
方法並檢查異常類型並返回你自己的響應:
來自文檔 :
render方法負責將給定的異常轉換為應該發送回瀏覽器的HTTP響應。 默認情況下,異常將傳遞給基類,后者會為您生成響應。 但是,您可以自由檢查異常類型或返回自己的自定義響應
應用程序/異常/ Handler.php
use Spatie\Permission\Exceptions\UnauthorizedException;
public function render($request, Exception $exception)
{
if ($exception instanceof UnauthorizedException) {
return response()->json([
'responseMessage' => 'You do not have required authorization.',
'responseStatus' => 403,
]);
}
return parent::render($request, $exception);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.