2016-08-02 8 views
5

Ich versuche, die Berechtigung zum Zugriff auf eine Aktion auf zwei verschiedene Benutzerrollen Admin, Normal_User wie unten dargestellt zu setzen.Wie mehrere Parameter zu Middleware mit OR-Bedingung in Laravel übergeben werden 5.2

Diese Route kann entweder über Admin oder Normal_user aufgerufen werden. In dieser Middleware-Konfiguration muss der Benutzer jedoch sowohl Admin als auch Normal_User sein. Wie kann ich ODER-Bedingungen in Middleware-Parameterübergaben hinzufügen? Oder gibt es eine andere Methode, um eine Erlaubnis zu geben?

Das Folgende ist meine Middleware

public function handle($request, Closure $next, $role) 
    { 
     if ($role != Auth::user()->user_role->role) { 
      if ($request->ajax() || $request->wantsJson()) { 
       return response('Unauthorized.', 401); 
      } else { 
       return response('Unauthorized.', 401); 
      } 
     } 
     return $next($request); 
    } 

Kann jemand bitte antworten?

Antwort

8

mehrere Parameter hinzuzufügen, müssen Sie sie mit einem Komma trennen:

Route::group(['middleware' => ['role_check:Normal_User,Admin']], function() { 
     Route::get('/user/{user_id}', array('uses' => '[email protected]', 'as' => 'showUserDashboard')); 
    }); 

Dann haben Sie sie wie so in der Middleware für den Zugriff auf:

public function handle($request, Closure $next, $role1, $role2) {..} 

Die Logik von dort oben ist Um Sie zu implementieren, gibt es keine automatische Möglichkeit, "ODER" zu sagen.

9

Anstatt Ihrer handle-Methode mehrere Argumente hinzuzufügen und sie jedes Mal zu aktualisieren, wenn Sie Ihrer Anwendung eine neue Rolle hinzufügen, können Sie sie dynamisieren.

Middleware

Strecke

Route::group(['middleware' => ['role_check:default,admin,manager']], function() { 
    Route::get('/user/{user_id}', array('uses' => '[email protected]', 'as' => 'showUserDashboard')); 
}); 

Dies wird überprüfen, ob der authentifizierte Benutzer mindestens eine der Rollen hat vorgesehen, und wenn ja, übergibt die Anforderung an die nächste Middleware Stapel. Natürlich müssen die hasRole() Methode und die Rollen selbst von Ihnen implementiert werden.

+0

Nizza. Es ist überraschend, dass die Laravel-Dokumente nicht den Fall abdecken, bei dem eine unbekannte Anzahl von Parametern an die Middleware übergeben werden soll. – omarjebari

+0

Gute Gehirne. Ich mag. Vielen Dank! – gthuo

0

Dies ist definiert von dem Controller Konstruktor 2 Middleware-Funktionen aufrufe, eines mit zusätzlichen Parametern ($ System) In der Controller-Klasse

public function __construct() 
{ 
    $this->middleware('admin'); 
    $this->middleware('adminsystem:SYS2'); 
} 

In Middleware/Adminsystem.php

namespace App\Http\Middleware; 
use Closure; 
class AdminSystem { 
    public function handle($request, Closure $next, $system) 
    { 
     if(auth()->guard('admin')->check()){ 
      if (auth()->guard('admin')->user()->system == $system) { 
       return $next($request); 
      } 
     } 
     return response('Unauthorised!', 401); 
    } 
}