В моем проекте у меня 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
];
Что я делаю не так, как правильно заставить всех работать, а не только одну группу за раз?