laravel 5根据用户角色

时间:2016-04-23 14:34:42

标签: laravel laravel-5

我的'用户'表有一个'角色'列,当用户注册或登录时,我希望根据他们的角色列重定向它们。我怎么能这样做?

5 个答案:

答案 0 :(得分:11)

我将此功能添加到AuthController.php并且所有内容都是神奇地修复了

public function authenticated($request , $user){
    if($user->role=='super_admin'){
        return redirect()->route('admin.dashboard') ;
    }elseif($user->role=='brand_manager'){
        return redirect()->route('brands.dashboard') ;
    }
}

答案 1 :(得分:4)

如果您使用的是Laravel随附的身份验证系统,则可以覆盖redirectPath中的Auth\AuthController方法。

例如,这会将具有“admin”角色的用户重定向到/admin,将其他任何用户重定向到/account

public function redirectPath()
{
    if (\Auth::user()->role == 'admin') {
        return "/admin";
        // or return route('routename');
    }

    return "/account";
    // or return route('routename');
}

您还可以使用Laravel Authorization(在5.1.11中引入)来管理角色逻辑。

答案 2 :(得分:3)

在laravel 5.7中,没有AuthController.php,因此您必须转到 Controllers \ Auth \ LoginController.php 并添加以下功能,

如果重定向路径需要自定义生成逻辑,则可以定义 redirectTo 方法,而不是 redirectTo 属性

protected function redirectTo()
{

    if($user->role=='super_admin'){
        return '/path1';
    }elseif($user->role=='brand_manager'){
        return '/path2';
    }   

}

答案 3 :(得分:2)

你可以这样处理handle函数里面的Middleware RedirectIfAuthenticated.php中的请求,如下所示:

/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @param  string|null  $guard
 * @return mixed
 */
public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
        if (Auth::user()->role == 'admin') {
            return redirect('/admin');
        }else{
            return redirect('/');
        }
    }

    return $next($request);
}

答案 4 :(得分:0)

我写这是为了防止有人认为有用。如果您想始终重定向,而不仅仅是登录,我会在web.php上这样重定向:

  Route::get('/home', function () {
    switch(\Illuminate\Support\Facades\Auth::user()->role){
        case 'admin':
            return redirect(route('home.admin'));
            break;
        case 'employee':
            return redirect(route('home.employee'));
            break;
        default:
            return '/login';
            break;
    }
});

Route::get('/home/admin', 'HomeController@indexAdmin')->name('home.admin');
Route::get('/home/employee', 'HomeController@indexEmployee')->name('home.employee');

因此,每当他们单击/ home时,都将重定向到您想要的url,您也可以使用'/'。