2017-06-02 2 views
0

Ich habe zwei Ebenen in Middleware und es funktioniert nicht gut, wie Middleware in zwei Ebenen auf einmal schreiben?Wie schreibe oder verwende ich zwei Ebenen von Benutzerrechten gleichzeitig?

public function __construct() 
{ 
    $this->middleware('auth'); 
    $this->middleware('Admin'); 
    $this->middleware('Teacher'); 
} 

ich auch diese haben, möchte ich überprüfen, dass diese Seite von admin und Lehrer nur zugänglich ist, aber den Code in das Schreiben es nicht gut funktioniert und wie man es richtig schreiben?

@if (Auth::check() && Auth::user()->level == 'Admin') 
    @elseif (Auth::check() && Auth::user()->level == 'Teacher') 
@endif 

Wenn Sie mir bei der Lösung dieses Problems helfen können, ich bin sehr dankbar

+0

sobald Sie eine eigene Middleware schreibt, wird die Bedingung der Middleware-Klasse in Seiten verwalten. Siehe hier https://laravel.com/docs/master/middleware#defining-middleware – xmhafiz

Antwort

0

in meiner Erfahrung, die ich tat, eine Middleware ..

Middleware

public function handle($request, Closure $next, $roles) 
{ 
    $roles = explode('|',$roles); 
    $user = User::find($request->user()->id); 
    foreach($user->intRoles as $myRole) 
    { 
     if(in_array($myRole->role_id, $roles)) 
     { 
      return $next($request); 
     } 
    } 
    return redirect()->back(); 
} 

Route

mydomain.com/users wird nur für die Benutzer zugänglich sein, die Rollen (id) haben von 1, 2 oder 3 ..

0

Sie haben 2 separate Middleware-Benutzerebene für die Überprüfung. Dies zwingt beide Bedingungen und funktioniert nicht wie Sie wollen. Sie benötigen eine einzige Middleware, um die Benutzerebene zu überprüfen und Parameter an sie zu übergeben.

Angenommen, wir haben diese Middleware als access benannt.

public function handle($request, Closure $next, $levels) 
{ 
    $userLevels = explode(',', $levels); 

    if (Auth::check() && in_array(Auth::user()->level, $userLevels)) { 
     return $next($request); 
    } 

    return redirect('/home'); 
} 

In Ihrem Controller hinzufügen, um diesen

public function __construct() 
{ 
    $this->middleware(['auth', 'access:Admin,Student']); 
} 
+0

Warum das Ergebnis gleich bleibt? Seite immer geworfen –

+0

@AgusSuparman genauer sein. Was ist der Fehler, den Sie bekommen? Führen Sie auch 'php artisan route: list' aus und teilen Sie die Ergebnisse. – Sandeesh

Verwandte Themen