Аутентификация Laravel 4. Ограничить доступ к некоторым функциям ресурса, но не ко всем

У меня есть этот ресурс блога, в котором есть обычные методы CRUD. (Индексирование, создание, хранение, отображение, редактирование, обновление, уничтожение).

В моем routes.php есть следующий маршрут:

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

но я хочу ограничить все, кроме индекса и показа. так что я

Route::get('blog', 'PostsController@index');
Route::group(array('before' => 'auth'), function()
{
    Route::resource('blog', 'PostsController');
});

что подходит для индекса, но я не знаю, как направить метод show? Или есть другой способ? Должен ли я маршрутизировать каждый URI индивидуально и помещать те, которые я хочу ограничить, в свой маршрут с ограниченным доступом вместо маршрутизации ресурса?

Ваше здоровье


person Ben Dubuisson    schedule 05.09.2013    source источник


Ответы (2)


В Laravel есть функция, которая позволяет вам указывать фильтры в __construct методе контроллеров, используя $this->beforeFilter. Эта функция принимает второй аргумент, который позволяет вам предоставлять исключения (или включать фильтр только для определенных методов). Попробуйте использовать исходный файл маршрутов и настройте контроллер следующим образом:

class PostsController extends BaseController {

    function __construct() {
        // ...
        $this->beforeFilter('auth', array('except' => array('index', 'show')));
        // ...
    }

    // ...

См. Раздел «Фильтры контроллера» в документации Laravel. Это не совсем хорошо документировано, но вы также можете начать более глубокое путешествие в глубины Laravel с здесь.

person Jon Gjengset    schedule 05.09.2013
comment
Спасибо, похоже, верный вариант - person Ben Dubuisson; 06.09.2013
comment
Именно то, что я искал. Laravel потрясающий. - person Jared Eitnier; 07.06.2014

В Laravel 5 вместо этого вы используете функцию промежуточного программного обеспечения:

$this->middleware('auth', array('except' => array('index', 'show')));
person Sam Deering    schedule 19.03.2015