Laravel 4 — улучшить код для проверки подлинности

У меня есть приложение Laravel 4 с опросом ресурсов

// routes.php
Route::resource('polls', 'PollController');

Я не хочу, чтобы кто-либо мог перечислить все опросы, за исключением случаев, когда пользователь аутентифицирован и является администратором. Это было мое решение:

// PollController.php
public function index() {

    if (Auth::check() && Auth::user()->admin) {
        return View::make('polls.index', Poll::all());
    }

    return View::make('polls.create', []);
}

Этот код прекрасно работает, но не очень чисто код. На этот раз я делаю это «проверкой администратора» в нескольких местах. Также не похоже, что это следует практике «Функция должна делать только 1 вещь».

Мне было интересно, есть ли более чистый способ обработки случаев, когда ответ меняется в зависимости от того, вошел ли пользователь в систему и является ли он администратором?


person Enrique Moreno Tent    schedule 10.03.2015    source источник


Ответы (1)


Используйте группы маршрутов и фильтры аутентификации.

http://laravel.com/docs/4.2/routing#route-groups

http://laravel.com/docs/4.2/security#protecting-routes

Пример

Route::group(array('before' => 'auth'), function()
{
  // Route::resource('poll', 'PollController');
  // Additional routes
}

Вот отличная серия руководств по Laravel в целом (и по вашей теме); http://culttt.com/2013/09/16/use-laravel-4-filters/

person dojs    schedule 10.03.2015
comment
Почему вы комментируете свой собственный ответ? Просто отредактируйте ;) - person Kyslik; 10.03.2015
comment
@Kyslik ранее был вопрос... Как мне добавить фильтр в Route::resource - person dojs; 10.03.2015
comment
В любом случае хорошей практикой является редактирование вашего ответа. Именно по этой причине. ###Пример прошлого там и готово. - person Kyslik; 10.03.2015
comment
@Kyslik Хорошо, спасибо за подсказку, я обновил пост. Хорошего дня. - person dojs; 10.03.2015
comment
Это добавило бы фильтр ко всем маршрутам ресурса. Я просто хотел это для индексного маршрута. Но это решило проблему: stackoverflow.com/questions/15823161/ - person Enrique Moreno Tent; 10.03.2015