根据Laravel中的用户角色对同一路由使用不同的控制器

时间:2019-03-16 03:42:56

标签: php laravel

我想要的是我可以根据登录用户的角色对同一路由使用不同的控制器,因此,如果以admin角色登录的用户希望从Admin名称空间加载给定URL的控制器。我已经做到了

Route::group(['middleware'=>['install','auth']],function(){

    $role = \Auth::user()->role;
    switch ($role)
    {
        case 'admin':
            $prefix = 'Admin\\';
            break;
        case 'Foo':
            $prefix = 'Foo\\';
            break;

    }
    Route::resource('/foo',$prefix.'FooController');
    //.......

但是据说Auth :: user()为null,还有另一种方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:0)

尝试使用auth()->user()或包括一个特定的Auth模块而不是\Auth::user(),这可能是因为解释器使用了错误的Auth模块,因为其中有很多模块

答案 1 :(得分:0)

您可以使用中间件为管理员或“ Foo”进行重定向,只需检查auth角色,然后将重定向返回正确的路由即可。

class AdminOnly
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(Auth::user()->role != 'admin'){
            return redirect('path/to/non/admin/route');
        }

        return $next($request);
    }
}

然后在您的路由文件中定义两个路由,并使用中间件在它们之间重定向。