Это возможно несколькими способами. Поскольку вы входите в свой основной домен, вам нужно каким-то образом указать, какой пользователь имеет доступ к какому субдомену. Использование разных ролей кажется разумным подходом для этого. Так, например, пользователь, имеющий доступ к поддомену 1, также будет иметь роль, подобную ROLE_USER_SUB1
.
С помощью этой настройки вы можете изменить security.yaml
и использовать настройки access_control
, чтобы ограничить доступ к определенным ролям в зависимости от домена, используя дополнительные параметры соответствия
security:
access_control:
...
- { path: ^/, roles: ROLE_USER_SUB1, host: sub1\..* }
- { path: ^/, roles: ROLE_USER_SUB2, host: sub2\..* }
Возможно, вам придется настроить это в соответствии с вашими потребностями, а также соблюдать осторожность, чтобы правильно упорядочить маршруты, так как будет использовано первое соответствующее правило.
Другое возможное решение - использовать простой прослушиватель событий, который запускается при каждом запросе в kernel.request
(будьте внимательны, чтобы проверить приоритет, так как вам, вероятно, нужно поместить слушателя после прослушивателя брандмауэра) или kernel.controller
. а затем используйте диспетчер принятия решений о доступе или Symfony\Component\Security\Core\Security
, чтобы проверить, вошел ли пользователь (a) и имеет ли (b) правильный набор ролей, см. https://symfony.com/doc/current/security/securing_services.html