У меня есть приложение 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', []);
}
Этот код работает просто отлично, но он не очень чистый код. На этот раз я делаю это «проверка администратора» в нескольких местах. Также не похоже, что это следует из практики «Функция должна делать только одну вещь».
Мне было интересно, есть ли более чистый способ обработки случаев, когда ответ меняется в зависимости от того, вошел ли пользователь в систему и является ли он администратором?
Используйте группы маршрутов и фильтры авторизации.
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/
Других решений пока нет …