Использование фильтров маршрутов в 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 }Надеюсь, что это поможет