2015-04-24 16 views
6

Sto usando Laravel 5 su una macchina di sviluppo di Windows. Voglio personalizzare e utilizzare il middleware AuthAuth nella mia applicazione, per mantenere l'autenticazione. Il mio caso d'uso è uno standard. Esistono due (o tre) classi di utenti: Admin e Regular (normale sarebbero tutti gli utenti che non sono admin).Laravel Auth per convalidare solo admin/superuser

l'amministratore ha il ruolo evidente di gestione back-end, e quindi ha un gruppo separato di routing /admin/, che dovrebbe reindirizzare un utente unlogged a /admin/login. Ho configurarlo in questo modo ..

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

Quando il modulo di accesso viene inviato, come faccio a chiedere Auth per aggiungere un filtro

  • o che solo validate tra quegli utenti dove 'is_admin' è vero?
  • o chiedere prima a unire una tabella Utente e una tabella UserRoles per identificare solo gli utenti con un ruolo di amministratore?
+0

Come è possibile visualizzare la pagina di accesso se viene applicato il middleware Auth? – Mithredate

+0

Se la mia risposta ti ha aiutato, sarebbe fantastico se lo contrassegnassi come accettato. Grazie! –

risposta

5

Vi consiglio di definire un altro middleware che rileva se l'utente è admin invece di modificare l'auth. Ora aggiungi questo altro middleware ai tuoi percorsi a cui solo gli amministratori possono accedere.

aggiungere diversi middleware per instradare come questo

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

Middleware sarà simile

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

grazie, la tua soluzione è davvero pratica .. sto uscendo da Auth anche prima per trattare severamente gli utenti regolari dal provare. – rolfk

0

Perché non invece di trattare con il filtro Auth e cercando di "validare" solo a una certa condizione , nel tuo codice di accesso, basta controllare qual è il tipo di utente?

Questo è il mio codice di livello elevato di farlo:

 // 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) .... 

In questo modo si fa solo una volta quando si tenta l'accesso e il gioco è fatto?

Problemi correlati