Как я могу переопределить авторизацию FOSUserBundle в Symfony 2
Я использую FOSUserBundle, и я ищу лучший способ добавить логику авторизации.
Маршруты, которые я хочу найти, всегда начинаются с одного и того же шаблона:
/admin/{id}/
Идентификатор относится к сущности "Сайт". Класс User имеет отношение ManyToOne с этой сущностью.
Итак, я хочу каждый раз проверять, соответствует ли вызываемый маршрут "сайту", хранящемуся в моем пользовательском экземпляре. Я проверил документацию, чтобы найти лучший способ: создание разных ролей, использование ACL, проверка вручную в каждом контроллере... Я не хочу проверять каждую вызванную функцию, но я не нахожу более легкий метод, поэтому я ищу помощь.
2 ответа
Я наконец нашел другое решение. Я не уверен, что это лучший способ, но он работает.
Все мои контроллеры расширяют абстрактный контроллер функцией __call, которая проверяет, соответствует ли веб-сайт пользователя сеанса тому, который был передан преобразователем параметров. Я изменяю все свои вибрации метода контроллера на "защищенный", и это кажется хорошим.
Вам необходимо настроить доступ к авторизации маршрута в app/config/security.yml
файл
Как это:
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/*, role: ROLE_ADMIN }