laravel一个基于用户角色的多个控制器的路由

时间:2017-05-07 11:47:19

标签: php laravel routes middleware

所以我想要实现某些目标,这似乎是不可能的。我希望我的应用程序中的一些路由使用基于用户角色的不同控制器。这是我正在尝试的方法,但它不能很好地工作。用户路由工作,但管理员路由返回和TryCs获取VerifyCsrfToken.php文件中的非对象错误属性*

Route::group(array('middleware' => 'isAdmin'), function() {
    Route::get('/', 'Admin\TestController@getIndex');
});

Route::group(array('middleware' => 'isUser'), function() {
    Route::get('/', 'User\TestController@getIndex');
});

我的中间件

public function handle($request, Closure $next)
{
    if(Auth::user()->isAdmin()) {
        return $next($request);
    }
}

public function handle($request, Closure $next)
{
    if(Auth::user()->isUser()) {
        return $next($request);
    }
}

我见过一些处理这种情况,只是在控制器中处理这个,甚至检查路由文件中的使用角色,但我宁愿使用middlwares,所以我的路由文件会更干净

2 个答案:

答案 0 :(得分:0)

您可以这样做:

Route::get('/', function () {
    if (auth()->check()) {
        if (auth()->user()->isAdmin()) {
            return redirect()->route('');
        } elseif (auth()->user()->isUser()) {
            return redirect()->route();
        } else {
            return view('index');
        }
    }
    return redirect()->to('login');
});

答案 1 :(得分:0)

错误消息可能与您的节目代码无关。

但是在一条路线上使用多个控制器是不可能的,我曾经问过同一个问题。

但您可以使用一个控制器并在该控制器中处理授权。

例如:

public function getIndex()
{
    if(Auth::user()->isAdmin()) {
        //Admin
        return $this->getAdminIndex();
    } else {
        //No admin
        return $this->getUserIndex();
    }
}

protected function getAdminIndex()
{
    return view('admin.index');
}

protected function getUserIndex()
{
    return view('user.index');
}

但最干净的方法就是只有两条路线。