首页 文章

如何根据用户的角色将目标用户重定向到不同的路由?

提问于
浏览
8

我想根据用户的角色将用户重定向到不同的路由 . 我的应用程序中有两个安全区域,“admin”和“dashboard” . 我想检查用户是否经过身份验证,然后重定向到预期,但如果用户有角色编辑器,则应将其重定向到仪表板,否则如果他有角色,则应重定向到管理区域 .

我在登录时使用了AuthenticatesAndRegistersUsers类 . 我在自定义控制器上有这个:

/**
 * The default redirecTo path.
 *
 */
 protected $redirectTo = '/dashboard';

因此,当用户通过身份验证时,它将被重定向到仪表板,但我想检查预期的URL是否在管理组路由上,如果用户具有管理员角色,则应将其重定向到管理区域 .

我正在使用此中间件重定向到登录:

public function handle($request, Closure $next)
{
    if ($this->auth->guest())
    {
        if ($request->ajax())
        {
            return response('Unauthorized.', 401);
        }
        else
        {
            return redirect()->guest('auth/login');
        }
    }

    return $next($request);
}

3 回答

  • 1

    您可以覆盖 AuthController 中特征使用的 redirectPath 方法,以注入您需要的逻辑 . 像这样的东西:

    /**
     * Get the post register / login redirect path.
     *
     * @return string
     */
    public function redirectPath()
    {
        // Logic that determines where to send the user
        if (\Auth::user()->type == 'admin') {
            return '/admin';
        }
    
        return '/dashboard';
    }
    

    EDIT:

    Laravel在 AuthenticatesAndRegistersUsers trait中使用以下声明在成功登录后重定向用户:

    return redirect()->intended($this->redirectPath());
    

    这将尝试将用户重定向到先前尝试的URL .

    如果您需要在用户登录时将用户重定向到正确的位置,那么最好通过向身份验证中间件添加更多逻辑来实现 .

  • 7

    另一种方法是覆盖经过身份验证的方法

    public function authenticated()
        {
            if(Auth::check()) {
                if(\Auth::user()->hasRole('Super Admin')) {
                    return redirect('/admin-dashboard');
                } else {
                    return redirect('/user-dashbaord');
                }
            }    
        }
    
  • 0

    我用这个 . 您还需要修改中间件 RedirectIfAuthenticated ,以便赢得't route home. Just to different user'仪表板 .

    public function authenticated()
    {
        if($request->user()->hasRole('admin'))
                 {
                     // return redirect()->intended(route('admin.index'));
                     return redirect()->route('admin.index');
                 }
             if($request->user()->hasRole('super'))
                 {
                     return redirect()->route('super.index');
                 }
             if($request->user()->hasRole('officer'))
                 {
                     return redirect()->route('officer.index');
                 }   
    }
    

相关问题