Как отфильтровать по пользователю все запросы?

В Symfony есть несколько способов фильтрации запросов по пользователю, в зависимости от того, как вы делаете аутентификацию пользователей.

Если вы используете встроенную систему аутентификации Symfony, основанную на Symfony Security, вы можете настроить фильтрацию запросов в конфигурации вашего приложения, с помощью настраиваемых "access control rules" (правил контроля доступа).

Для начала убедитесь, что у вас включена система аутентификации и имеется настроенный "firewall". Вы можете проверить это в файле config/packages/security.yaml:

security:
    # ...
    firewalls:
        main:
            # ...
            guard:
                authenticators:
                    - AppSecurityLoginFormAuthenticator

    # ...

Затем добавьте access_control секцию в этот же файл security.yaml, чтобы настроить фильтрацию запросов:

security:
    # ...
    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }
        - { path: ^/profile, roles: ROLE_USER }

В этом примере все запросы, начинающиеся с /admin, будут фильтроваться таким образом, что только пользователи с ролью ROLE_ADMIN могут получить доступ к ним. Аналогично, все запросы, начинающиеся с /profile, будут фильтроваться таким образом, что только пользователи с ролью ROLE_USER могут получить доступ к ним.

Это лишь примеры, и вы можете настраивать правила доступа по вашему усмотрению, учитывая ваши специфические требования.

Если вы используете кастомную аутентификацию, не основанную на Symfony Security, вы можете добавить фильтрацию запросов напрямую в ваш контроллер или сервис на уровне кода. Вы можете получить текущего пользователя с помощью $this->getUser() (если находитесь в контроллере) или $this->get('security.token_storage')->getToken()->getUser() (если находитесь в сервисе), и затем проверить его роль или иные свойства, чтобы решить, разрешить ли ему выполнить запрос или нет.

В обоих случаях, важно учитывать, что эти фильтрации работают на уровне приложения и не предотвращают отправку запросов от клиента. Вместо этого они контролируют доступ к определенным частям вашего приложения, отвечая на запросы пользователя внутри фреймворка Symfony. Если вам необходима фильтрация на более раннем этапе, до прохождения запроса через Symfony, вам следует рассмотреть внешние инструменты, такие как сервер proxy или настройки веб-сервера, для дополнительной защиты.