Как использовать несколько групп Middleware на Laravel? - PullRequest
0 голосов
/ 08 октября 2018

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

ДляУ каждого уровня пользователя у меня есть промежуточное программное обеспечение с этим кодом (с изменением типа):

public function handle($request, Closure $next)
{
    if(Auth::user()->type==3)
        return $next($request);
    else
        return redirect()->route('dashboard');
}

А в файле kernel.php они написаны так:

protected $routeMiddleware = [
    ...
    'teacher' => \App\Http\Middleware\RedirectIfTeacher::class,
    ...
]

В моем приложении у каждого пользователя есть уровень, который начинается с 1 до 5, но у каждого уровня есть отдельные представления и некоторые общие представления, но мне не удается перенаправить представления более чем для одного типа.пользователя, потому что я не могу заставить их работать, когда я использую более одного промежуточного ПО на маршруте (или маршрутах), которые совместно используются более чем двумя типами пользователей.

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

Прямо сейчас я пробовал с этим кодом:

Route::group(['middleware' => ['administrator','teacher','student']], function(){

И шih этот код:

Route::group(['middleware' => ['administrator' OR 'teacher' OR 'student']], function(){

Также я попробовал с этим стилем:

Route::group(['middleware' => ['administrator|teacher|student']], function(){

Без удачи, есть что-то, что я делаю неправильно?или есть лучший способ сделать то, что я пытаюсь достичь, заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Я использую приведенный ниже код, и он работает:

Route::group(['middleware' => ['administrator','teacher','student']], function() {});

1 В файле kernel.php есть ли у вас все ключи, назначенные промежуточным программным обеспечением?Например:

protected $routeMiddleware = [
...
'administrator' => \App\Http\Middleware\RedirectIfAdmin::class,
'teacher' => \App\Http\Middleware\RedirectIfTeacher::class,
'student' => \App\Http\Middleware\RedirectIfStudent::class,
...
]

2 Попробуйте проверить пользовательские переменные перед if в вашем дескрипторе ().

dd(Auth::user()->type);
0 голосов
/ 08 октября 2018

Вам нужно передать массив, я думаю,

Route::group(['middleware' => ['administrator','teacher','student']], function() {});

Если это не сработает, вы должны разделить их, я думаю,

Route::group(['middleware' => 'administrator'], function () {
    Route::group([ 'middleware' => 'teacher'], function() {
        Route::group([ 'middleware' => 'student'], function() {

     });
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...