簡體   English   中英

自定義Spatie Laravel-Permission Exception消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM