Как я могу переопределить авторизацию 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 }
Другие вопросы по тегам