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

В моем проекте у меня 4 типа пользователей: супер администратор, администратор, директор и пользователь. Супер-администратор и администратор могут видеть одни и те же страницы и иметь один и тот же маршрут, разница между ними различима в контроллерах, у директора всего 6 маршрутов или около половины супер-администратора, а пользователь видит только панель инструментов.

Прямо сейчас я пытаюсь настроить маршруты в web.php, но работает либо супер-администратор, администратор, а не директор или маршруты директоров, а два других - нет. Что я делаю не так?

Middleware SuperAdmin

public function handle($request, Closure $next)
{
    $user = Auth::user();
    if (auth()->check() && $user->isSuperAdmin()) {
        return $next($request);
    }
    return redirect('/');
}

Middleware Admin

public function handle($request, Closure $next)
{
    $user = Auth::user();
    if (auth()->check() && $user->isAdmin() || $user->isSuperAdmin()) {
        return $next($request);
    }
    return redirect('/');
}

Middleware Director

public function handle($request, Closure $next)
{
    $user = Auth::user();
    if (auth()->check() && $user->isDirector()) {
        return $next($request);
    }
    return redirect('/');
}

В web.php

//Auth and login routes
Route::group(['middleware' => 'auth'], function () {
    Route::resource('/', 'DashController');
    Route::get('/logout')->name('logout')->uses('Auth\LoginController@logout');
    Route::group(['middleware' => 'App\Http\Middleware\AdminMiddleware'], function () {

        //All the routes are in this group
    });

    Route::group(['middleware' => 'App\Http\Middleware\DirectorMiddleware'], function () {

        //Corresponding routes for director here
    });
});

В моем Kernel.php

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'admin' => \App\Http\Middleware\AdminMiddleware::class,
    'super' => \App\Http\Middleware\SuperAdminMiddleware::class,
    'director' => \App\Http\Middleware\DirectorMiddleware::class,
    //other default ones
];

Что я делаю не так, как правильно заставить всех работать, а не только одну группу за раз?

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