2016-08-02 15 views
5

Próbuję ustawić uprawnienia dostępu do akcji na dwie różne role użytkowników Admin, Normal_User, jak pokazano poniżej.Jak przekazywać wiele parametrów do oprogramowania pośredniego z warunkiem LUB w Laravel 5.2

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

Do tej trasy można uzyskać dostęp przez Admin lub Normal_user. Ale w tej konfiguracji oprogramowania pośredniego użytkownik musi być zarówno administratorem, jak i Normal_User. Jak mogę dodać warunek OR w przekazywaniu parametrów oprogramowania pośredniego? Czy jest jakaś inna metoda udzielania pozwolenia?

co następuje moja 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); 
    } 

Może ktoś odpowiedz?

Odpowiedz

8

Aby dodać wiele parametrów, trzeba oddzielić je przecinkiem:

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

wtedy masz do nich dostęp w Twojej middleware tak:

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

logika stamtąd jest gotowy do wdrożenia, nie ma automatycznego sposobu na wypowiedzenie "OR".

9

Zamiast dodawać wiele argumentów do metody obsługi i aktualizować ją za każdym razem, gdy dodajesz nową rolę do swojej aplikacji, możesz uczynić ją dynamiczną.

Middleware

Route

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

Pozwoli to sprawdzić, czy uwierzytelniony użytkownik ma co najmniej jedną z ról dostarczane i jeśli tak, to przekazuje żądanie do następnej warstwy pośredniej stos. Oczywiście metoda hasRole() i same role będą musiały zostać zaimplementowane przez ciebie.

+0

Nicei. Zaskakujące jest to, że dokumentacja Laravel nie obejmuje przypadku, w którym chcesz, aby nieznana liczba parametrów została przekazana do oprogramowania pośredniego. – omarjebari

+0

Dobry mózg. Lubię. Dzięki! – gthuo

0

ta jest definiowana nazywając 2 funkcje warstwy pośredniej z konstruktora kontrolera, jeden z dodatkowym parametrem (systemowych $) w klasie kontrolera

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

W 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); 
    } 
} 
Powiązane problemy