2015-06-23 16 views
6

Ich möchte meinen Benutzer auf andere Route umleiten, basierend auf ihrer Rolle. Ich habe zwei gesicherte Bereiche in meiner App, "admin" und "dashboard". Ich würde gerne überprüfen, ob der Benutzer authentifiziert ist, und dann zum beabsichtigten Redirect umleiten, aber wenn der Benutzer über einen Rolleneditor verfügt, sollte er zum Dashboard umgeleitet werden, andernfalls sollte der Administrator in den Adminbereich umgeleitet werden.Laravel 5 Weiterleitung für andere Route basierend auf Rolle

Ich benutze AuthenticatesAndRegistersUsers Klasse in meinem Login. Ich habe dies auf meinem benutzerdefinierten Controller:

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

Also, wenn ein Benutzer authentifiziert ist es Armaturenbrett umgeleitet wird, aber ich mag überprüfen, ob die beabsichtigte URL auf Admin-Gruppe Route ist und, wenn der Benutzer Admin-Rolle Es sollte in den Admin-Bereich umgeleitet werden.

ich diese Middleware bin mit umleiten um sich einzuloggen:

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); 
} 

Antwort

6

Sie könnten überschreiben die redirectPath Methode durch das Merkmal der Logik, die Sie injizieren müssen in Ihrem AuthController verwendet. Etwas wie folgt aus:

/** 
* 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 verwendet die folgende Erklärung in der AuthenticatesAndRegistersUsers Merkmal der Benutzer nach erfolgreicher Anmeldung zu umleiten:

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

Dies wird versuchen, den Benutzer zu umleiten zu der zuvor versuchten URL.

Wenn Sie Benutzer an die richtige Stelle umleiten müssen, wenn sie bereits eingeloggt sind, sollten Sie das am besten tun, indem Sie Ihrer Authentifizierungs-Middleware mehr Logik hinzufügen.

+0

Dies sollte funktionieren, aber was ist, wenn ich auf den vollständigen Pfad umleiten möchte? Beispiel: Benutzer versucht, zu "admin/settings/general" zu gelangen, wird zum Login weitergeleitet, er meldet sich an und wird dann zu/admin weitergeleitet, nicht der vollständige Pfad. – Tropicalista

+0

Standardmäßig versucht Laravel, zuerst zur gewünschten URL umzuleiten. Wenn es keins gab, wird es auf diese Methode zurückgreifen. –

+0

Ich sollte Redirect URL auf der Middleware festlegen? – Tropicalista

1

Ein anderer Ansatz ist authenticated Methode

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

Ich verwende diese zu überschreiben. Sie müssen auch die Middleware RedirectIfAuthenticated ändern, damit sie nicht nach Hause weitergeleitet wird. Nur zum verschiedenen Benutzer-Dashboard.

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'); 
      } 
}