Я создаю довольно обширное приложение для клиента, и мне нужно будет создать какой-то контроль над групповыми разрешениями. Я решил пойти с Cartalyst и их Sentry.
Пока все хорошо!Фильтр действий для каждого метода в контроллере Laravel
Теперь проблема, с которой я столкнулась, - это лучший способ обнаружения разрешения группы пользователей, поскольку их больше, чем один, поэтому я не могу просто использовать один фильтр и делать с ним.
Например, я хотел бы сделать что-то вроде этого:
Для страниц, которые требуется доступ уровня администратора
Route::group(array('before' => 'is_admin'), function()
{
Route::get('admin', array('as'=>'admin', 'uses'=>'[email protected]'));
// Other methods that require admin-level access
});
Для страниц, которым необходим доступ moretaor уровня и так далее ..
Route::group(array('before' => 'is_moderator'), function()
{
Route::get('orodja/plosca', array('as'=>'moderator', 'uses'=>'[email protected]'));
// Other methods that require moderator-level access
});
Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно будет определить новый маршрут для каждого действия контроллера, и это действительно не похоже на лучшую практику мне.
Далее я подумал о регистрации всех контроллеров с помощью Controller::detect()
и сделать их REST-full, но я здесь проблема, что я могу применить фильтр только к методу конструктора контроллера, а не к одному действию. Что делать, если у меня есть метод с разным уровнем доступа в одном контроллере ..?
Так что мой вопрос: Каков наилучший способ обойти эту проблему и есть ли способ применить фильтр действий к одному методу контроллера, а не к конструктору контроллера.
Спасибо и извините за мой английский!
Я бы рекомендовал вам использовать подход, предложенный Adrenaxus, вообще не использовать 'Controller :: detect'. Даже сначала это выглядит странно, определение каждого маршрута или даже каждого контроллера дает вам больше свободы, менее багги и более результативны. Btw, 'Controller :: detected' был полностью удален из L4. – vFragosop