Я использую FOSUserBundle, и я ищу лучший способ добавить логику авторизации.
Маршруты, которые я хочу найти, всегда начинаются с одного и того же шаблона:
/admin/{id}/
Идентификатор относится к сущности «Сайт».
Класс User имеет отношение ManyToOne с этой сущностью.
Поэтому я хочу каждый раз проверять, соответствует ли вызываемый маршрут «сайту», хранящемуся в моем пользовательском экземпляре.
Я проверил документацию, чтобы найти лучший способ: создание разных ролей, использование ACL, проверка вручную в каждом контроллере … Я не хочу проверять каждую вызванную функцию, но я не нахожу более легкий метод, поэтому я ищу помощь.
Вам необходимо настроить доступ к авторизации маршрута в 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 }
Я наконец нашел другое решение. Я не уверен, что это лучший способ, но он работает.
Все мои контроллеры расширяют абстрактный контроллер функцией __call, которая проверяет, соответствует ли веб-сайт пользователя сеанса тому, который был передан преобразователем параметров. Я изменяю все свои вибрации метода контроллера на «защищенный», и это кажется хорошим.