如何使用中间件为用户类型正确分配路由?拉拉韦尔

时间:2019-11-06 16:05:42

标签: laravel

在我的项目中,我有4个用户类型,超级管理员,管理员,主管和用户。超级管理员和超级管理员可以看到相同的页面,并且具有相同的路由,它们之间的区别在控制器中是可区分的,控制器只有6条路由,约占超级管理员的一半,而用户只能看到仪表板。

现在我正在尝试在web.php中设置路由,但是超级管理员,admin可以工作,而不是Director或Director的路由工作,而其他两个则不能。我在做什么错了?

中间件SuperAdmin

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

中间件管理员

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

中间件主管

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
];

我在做错什么,是使所有这些人一起工作而不仅仅是一次工作的正确方法是什么?

0 个答案:

没有答案