Symfony - Как динамически регистрировать пользователя в одном поддомене (не во всех) - PullRequest
0 голосов
/ 29 октября 2018

У меня есть сайт с несколькими поддоменами. Я хотел бы регистрировать пользователей, которые имеют определенные права на один из поддоменов, только когда он уже аутентифицирован на «основном» сайте. Допустим, мой основной домен www.domain.com, у меня есть sub1.domain.com, sub2.domain.com, sub3.domain.com. Когда пользователь проходит аутентификацию на domain.com, я хотел бы иметь возможность перенаправить его на sub2.domain.com, не прося его повторно пройти аутентификацию. Но он не должен проходить аутентификацию на sub1.domain.com или sub3.domain.com. Я читал об установке cookie_domain в config.xml, но в этом случае пользователь будет зарегистрирован для всех поддоменов. Это возможно ? Спасибо!

Изменить для получения дополнительной информации

Я работаю с Symfony 2.7, и я попробовал оба решения в security.yml: один основной общий брандмауэр и один для каждого субдомена (см. Ниже). Но я не настроил сеанс cookie_domain в config.yml для «.domain.com», так как я не хочу регистрировать пользователя во всех поддоменах.

firewalls:
    main:
        pattern: ^/
        host: %main_domain%
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
        logout:
            path: /logout
            target: /login
        anonymous:    true
        context: main_context
    sub1:
        pattern: ^/
        host: %sub1_domain%
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
        logout:
            path: /logout
            target: /login
        anonymous:    true
        context: main_context
    sub2:
        pattern: ^/
        host: %sub2_domain%
        ....

1 Ответ

0 голосов
/ 29 октября 2018

Это возможно несколькими способами. Поскольку вы входите в свой основной домен, вам нужно каким-то образом указать, какой пользователь имеет доступ к какому субдомену. Использование разных ролей кажется разумным подходом для этого. Так, например, пользователь, имеющий доступ к поддомену 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...