Использование фильтров маршрутов в Laravel
Я пытаюсь использовать фильтры маршрутов в laravel, чтобы проверить, имеет ли конкретный пользователь доступ к странице:
Route::filter('check_roles', function()
{
    $current_url = URI::current();
    $access = 0;
    $nav = Session::get('navigation');
    foreach($nav as $k => $n){
      if(in_array($current_url, $n)){
        $access = 1;
      }
    }
    if($access == 0){
     return Redirect::to('home');
    }
    //problem is if the user has access to the page a blank page is returned
});
Я использую его в таком маршруте:
Route::get('admin/(:all)', array('before' => 'check_roles'));
Проблема в том, что если пользователь имеет доступ к странице, то возвращается пустая страница. Как продолжить выполнение действия контроллера по умолчанию, если у пользователя есть доступ?
1 ответ:
Заменить
Route::get()наRoute::filter('pattern: admin/*', 'check_roles');.Теперь каждый раз, когда запрос содержит этот шаблон, будет вызываться ваш фильтр check_roles. Я думаю, что это то, что вам сейчас нужно, а не
Route::get(),Вы можете использовать
Route::get()на отдельных страницах, таких как
Route::get('supersecret', array('before' => 'check_roles'), function() { return View::make('mysecret') });Для получения дополнительной информации маршрутизация-фильтры
Обновление, чтобы отразить мое предложение по комментарию.
Вы можете создать
Admin_Controller, который расширит вашBase_Controllerи будет иметь ваш фильтр auth в__construct().class Admin_Controller extends Base_Controller { public function __construct() { parent::__construct(); $this->filter('before', 'auth'); } }Зарегистрируйте этот контоллер в своем старте.php (поиск Autoloader, где отображается ваш base_controller).
И теперь вы можете расширить свой
Admin_Controllerвсякий раз, когда вы хотите защитить свою область.class Pages_Controller extends Admin_Controller { // do cool stuff }Надеюсь, что это поможет