2013-09-05 4 views
6

Ho questa risorsa blog che ha i soliti metodi CRUD. (Indice, crea, archivia, mostra, modifica, aggiorna, distruggi).Autenticazione Laravel 4. Limita l'accesso ad alcune funzioni di una risorsa ma non tutte

Ho il seguente percorso nella mia routes.php:

Route::resource('blog', 'PostsController'); 

ma voglio limitare tutti, ma indice e spettacolo. quindi ho

Route::get('blog', '[email protected]'); 
Route::group(array('before' => 'auth'), function() 
{ 
    Route::resource('blog', 'PostsController'); 
}); 

che va bene per l'indice, ma non so come instradare il metodo show? oppure c'è un'altro modo? Invece di instradare la risorsa dovrei indirizzare ogni URI individualmente e mettere quelli che voglio ristretti nella mia rotta di accesso limitato?

Acclamazioni

risposta

12

laravel ha una funzione che consente di specificare i filtri nel metodo __construct dei controllori utilizzando $this->beforeFilter. Questa funzione accetta un secondo argomento che consente di fornire eccezioni (o abilitare il filtro solo per determinati metodi). Provare a utilizzare il file percorsi originali e configurare il controller in questo modo:

class PostsController extends BaseController { 

    function __construct() { 
     // ... 
     $this->beforeFilter('auth', array('except' => array('index', 'show'))); 
     // ... 
    } 

    // ... 

filtri Vedi controller nella Laravel documentation. Non è del tutto ben documentato, ma puoi anche iniziare un viaggio più profondo nelle viscere di Laravel dal here.

+0

Grazie appare come una valida opzione –

+1

Lavorare bene, applausi per questo, molto più pulito del mio! –

+0

Esattamente quello che stavo cercando. Laravel è fantastico. –

0

In laravel 5 si utilizza la funzione middleware invece in questo modo:

$this->middleware('auth', array('except' => array('index', 'show')));