Laravel run a group of middlewares with a specific guard

217 views Asked by At

I have two different guards api guard and transporter guard, I used laratrust package to manage the users roles and permissions

 Route::get('/requests', 'RequestController@index')->middleware('ability:owner|administrator,read-requests|all-requests');

I need to run the laratrust middlewares above only when the guard is api guard

Note:- from laratrust docs https://laratrust.santigarcor.me/docs/6.x/usage/middleware.html#concepts I figured out that you can specify your guard like so but it did not work

  Route::get('/requests', 'RequestController@index')->middleware('ability:owner|administrator,read-requests|all-requests|guard:api');
1

There are 1 answers

0
IGP On

I've never used Laratrust but if it's a middleware scoped to an entire route group, I think you can define it in your app/Http/Kernel.php file in the $middlewareGroups array.

protected $middlewareGroups = [
    'web' => [
        'ability:owner',
        'administrator',
        'read-requests',
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Laravel\Jetstream\Http\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:api',
        'ability:owner',
        'administrator',
        'read-requests',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];