Как я могу зарегистрировать несколько разрешений промежуточного программного обеспечения в группе маршрутов? - PullRequest
0 голосов
/ 06 апреля 2019

У меня 3 роли, администратор, репетитор и студент. Я хочу разместить их в 3 разных группах, но я хочу, чтобы администратор был во всех группах. Я пробовал разные методы, чтобы добавить администратора в другие маршруты, но он не работает. Как я могу заставить администратора использовать все маршруты в промежуточном программном обеспечении преподавателя? Вот мой код

AdminMiddleware , как и все остальные

class AdminMiddleware
{
    public function handle($request, Closure $next)
    {
        if(Auth::check() && Auth::user()->isRole()=="admin") {
            return $next($request);
        }
        return redirect('login');
    }
}

routmiddleware - в web.php

Route::group(['middleware'=>['auth'=>'admin']], function (){
   //admin routes
}
Route::group(['middleware'=>['auth'=>'tutor']], function (){
//tutor routes

}

в Kernel.php

'admin' => \App\Http\Middleware\AdminMiddleware::class,
'tutor' => \App\Http\Middleware\TutorMiddleware::class,
'student' => \App\Http\Middleware\StudentMiddleware::class,

в модели пользователя

public function isRole(){
    return $this->role; 
}

1 Ответ

0 голосов
/ 06 апреля 2019

Что вы можете сделать, это определить промежуточное программное обеспечение, которое принимает поддерживаемые роли в качестве аргумента:

class HasRoleMiddleware
{
    public function handle($request, Closure $next, ...$roles)
    {
        if(Auth::check() && in_array(Auth::user()->getRole(), $roles)) {
            return $next($request);
        }

        return redirect('login');
    }
}

Это промежуточное программное обеспечение ожидает, что User::getRole() возвращает роль в виде строки, то есть admin или tutor.Затем вам нужно определить промежуточное программное обеспечение в Kernel.php, как вы уже сделали:

'any_role' => \App\Http\Middleware\HasRoleMiddleware::class,

И, наконец, вы можете использовать промежуточное программное обеспечение следующим образом:

Route::group(['middleware' => 'auth'], function () {
    Route::group(['middleware' => 'any_role:admin'], function () {
        // admin routes
    }

    Route::group(['middleware' => 'any_role:admin,tutor'], function () {
       // tutor routes
    }
}

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

...