2015-04-24 16 views
6

Używam Laravel 5 na komputerze z systemem Windows. Chcę dostosowywać i używać oprogramowania pośredniego w całej mojej aplikacji, aby zachować uwierzytelnianie. Mój przypadek użycia jest standardowy. Istnieją dwie (lub trzy) klasy użytkowników - Admin i Zwykła (zwykli byliby wszyscy użytkownicy, którzy nie są administratorami).Laravel Auth do sprawdzania poprawności tylko administrator/superużytkownik

Admin ma oczywistą rolę zarządzania backend, a co za tym idzie posiada oddzielną grupę routingu /admin/, który powinien przekierować BezZapis użytkownikowi /admin/login. Mam go ustawić tak jak ..

Route::group(['middleware'=>'auth', 'prefix' => 'admin'], function() { 
    Route::get('login','App\[email protected]'); 
    Route::post('login','App\[email protected]'); 
}); 

Gdy formularz logowania jest zamieszczona, jak mogę zapytać Auth aby dodać filtr

  • albo że tylko validate spośród tych użytkowników, gdzie "is_admin" jest prawdziwe?
  • lub poprosić o pierwszą dołączyć do użytkownika i tabeli UserRoles, aby zidentyfikować tylko użytkowników z rolą administratora?
+0

Jak można wyświetlić stronę logowania, jeśli zastosowano do niej oprogramowanie pośredniczące Auth? – Mithredate

+0

Jeśli moja odpowiedź ci pomogła, byłoby wspaniale, jeśli oznaczysz ją również jako acceped. Dziękuję Ci! –

Odpowiedz

5

Zalecam zdefiniowanie innego oprogramowania pośredniego, które wykrywa, czy użytkownik jest administratorem, zamiast modyfikować autoryzację. Teraz dodaj to inne oprogramowanie pośrednie do tras, do których dostęp mają tylko administratorzy.

dodać kilka middleware na trasie tak

Route::group(['middleware' => ['auth','admin']], function() { 

Middleware będzie wyglądać mniej więcej tak

public function handle($request, Closure $next) { 
    if (Auth::user()->role == "admin") { 
    return $next($request); 
    } else { 
    return redirect("/")->withMyerror("You are not authorized for this action"); 
    } 
} 
+0

dziękuję, twoje rozwiązanie jest rzeczywiście praktyczne. Wylogowuję się z Auth, a także wcześniej, aby ściśle traktować zwykłych użytkowników. – rolfk

0

Może zamiast do czynienia z filtrem Autentyczna i próbuje „zatwierdź” tylko w pewnych warunkach , w swoim kodzie logowania, po prostu sprawdź, jaki jest typ użytkownika?

To jest mój kod wysoki poziom robi:

 // get roles which are allowed to login to the admin panel 
     $roles = $this->userService->adminRoles(); 

     $user = User::whereUsername(Input::get('username'))->whereIn('role_id', $roles)->first(); 

     if (is_null($user)) { 
      // ... 
     } 

     // create our user data for the authentication 
     $userdata = array(
      'username' => Input::get('username'), 
      'password' => Input::get('password'), 
     ); 

     // attempt to do the login 
     // Auth::attempt($userdata) .... 

W ten sposób można zrobić tylko raz podczas próby logowania i to wszystko?

Powiązane problemy