Route::group([
    'middleware' =>['JwtMiddleware', 'auth:api','can:isSuperAdmin'],
    'prefix' => '/schools'
], function () {
    Route::get('/', [SchoolController::class, 'index']);
});

Я хочу добавить дополнительную аутентификацию, например, только пользователь с ролью super_admin может получить доступ только к этой конечной точке, user_id пользователя с ролью super_admin равен 1. как я могу добавить промежуточное программное обеспечение к моему маршруту, как указано выше .. каковы другие отношения / важные коды для работы этого промежуточного программного обеспечения

0
Eager to learn 17 Мар 2021 в 08:23

1 ответ

Лучший ответ

Вам необходимо создать промежуточное программное обеспечение в папке промежуточного программного обеспечения:

<?php

namespace App\Http\Middleware;

use Closure;

class EnsureUserHasRole
{
    /**
     * Handle the incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string  $role
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        if (! $request->user()->hasRole($role)) {
            // Redirect...
        }

        return $next($request);
    }

}

И зарегистрируйте это промежуточное ПО на своем app/Http/Kernel.php:


    protected $routeMiddleware = [
        // ...
       'role' => \Illuminate\Auth\Middleware\EnsureUserHasRole::class,
    ];

Вам также понадобится hasRole() в вашей модели пользователя:

    public function hasRole($role)
    {
        switch ($role) {
            case 'isSuperAdmin':
                return $this->super_admin;
        }
    }

Ведь вы можете использовать его как:

Route::group([
            'middleware' => ['JwtMiddleware', 'auth:api', 'role:isSuperAdmin'],
            'prefix' => '/schools'
        ], function () {
            Route::get('/', [SchoolController::class, 'index']);
        });
1
ibrahim-dogan 17 Мар 2021 в 06:28