2013-07-07 16 views
5

Buduję aplikację Laravel 4 i chcę chronić mój obszar administracyjny, aby był dostępny tylko wtedy, gdy użytkownik jest zalogowany/uwierzytelniony.Laravel 4: ochrona tras dostarczanych przez kontroler

Jaki jest najlepszy sposób na zrobienie tego?

Docs laravel powiedzieć można zabezpieczyć trasy tak:

Route::get('profile', array('before' => 'auth', function() 
{ 
// Only authenticated users may enter... 
})); 

Ale co się dzieje, gdy moja trasa wygląda następująco:

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

Jak chronić trasę, która kieruje do kontroler?

Z góry dziękuję!

Odpowiedz

18

Do tego celu można użyć Route Groups.

Tak na przykład:

Route::group(array('before' => 'auth'), function() 
{ 
    Route::get('profile', function() 
    { 
     // Has Auth Filter 
    }); 

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

    // You can use Route::resource togehter with 
    // direct routes to the Resource Controller 
    // so e.g. Route::post('cms', '[email protected]'); 
}); 
+1

Hi guys, to była łatwa do wdrożenia odpowiedź - choć nie tylko potrzebny : Route :: group (array ('before' => 'auth'), function() { Route :: resource ('cms', 'PostsController'); }); Dzięki! – Josh

+0

@Josh Cieszę się, że pomogło. –

0

W swoim PostsController można umieścić zamknięcie w konstruktorze, aby zrobić to samo przed logiką, jak poprzednia trasa.

public function __construct() 
    { 
     $this->beforeFilter(function() 
     { 
      // 
     }); 
    } 
3

można umieścić filtr na konstruktora kontrolerze tak:

public function __construct() 
    { 
     $this->beforeFilter('auth'); 

     $this->beforeFilter('csrf', array('on' => 'post')); 

     $this->afterFilter('log', array('only' => 
          array('fooAction', 'barAction'))); 
    } 
+0

Czy mogę zastosować filtry tylko do niektórych metod HTTP? Testowanie tego teraz ... –

+0

Tak, na pewno możesz ... http://laravel.com/docs/controllers#controller-filters – Melvin