簡體   English   中英

使用 JetStream 時如何在路由上使用 laravel 的 can()

[英]How to use laravel's can() on routes when using JetStream

當與 JetStream 的權限結合使用時,我正在嘗試研究如何在路線上使用->can()

我可以看到如何在JetStreamServiceProvider.php中創建權限:


 protected function configurePermissions()
    {
        Jetstream::defaultApiTokenPermissions(['read']);

        Jetstream::role('admin', __('Administrator'), [
            'export:orders'
        ])->description(__('Administrator users can perform any action.'));

但是我可以弄清楚如何將它與路線結合起來:

Route::get('/generate-export/orders', [OrderExportController::class,'show'])->name('exportOrders.show')->can(' -- not sure what to put here --');

我已經嘗試了幾件事,但一無所獲。

這些令牌用於通過 sanctum 進行身份驗證的請求。 正如他們的文件所述:

Sanctum 9.x - 代幣能力中間件

Yoiu 需要先在App\Http\Kernel.php文件中的路由中間件數組中添加 2 個條目。

protected $routeMiddleware = [
    ...,
    'abilities' => \Laravel\Sanctum\Http\Middleware\CheckAbilities::class,
    'ability' => \Laravel\Sanctum\Http\Middleware\CheckForAnyAbility::class,
];

然后,您可以在路由中使用這些中間件。

Route::get('/generate-export/orders', [OrderExportController::class,'show'])
    ->name('exportOrders.show')
    ->middleware(['auth:sanctum', 'ability:export:orders']); // check if user has export:orders ability

至於abilitiesability之間的區別,引用文檔:

abilities中間件可以分配給一個路由,以驗證傳入請求的令牌是否具有所有列出的能力:

 Route::get('/orders', function () { // Token has both "check-status" and "place-orders" abilities... })->middleware(['auth:sanctum', 'abilities:check-status,place-orders']);

ability中間件可以分配給一個路由,以驗證傳入請求的令牌是否至少具有列出的能力之一:

 Route::get('/orders', function () { // Token has the "check-status" or "place-orders" ability... })->middleware(['auth:sanctum', 'ability:check-status,place-orders']);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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