首页 > 解决方案 > 如何为用户类型正确分配带有中间件的路由?拉拉维尔

问题描述

在我的项目中,我有 4 种用户类型超级管理员、管理员、主管和用户。超级管理员和管理员可以看到相同的页面和所有相同的路由,它们之间的区别在控制器中是可以区分的,主管只有6条路由或超级管理员的一半左右,用户只看到仪表板。

现在我正在尝试在 web.php 中设置路由,但是超级管理员、管理员工作而不是主管,或者主管路由工作而其他两个没有。我究竟做错了什么?

中间件超级管理员

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

我做错了什么,让所有这些都工作而不是一次只一组工作的正确方法是什么?

标签: laravel

解决方案


推荐阅读