Symfony - настройка аутентификации защиты во время выполнения
В настоящее время я занимаюсь разработкой веб-приложения на Symfony 4.2.
Приложение должно быть модульным. Поэтому я использую связки. В настоящее время я сталкиваюсь с проблемой аутентификации.
Давайте предположим, что есть два пакета:
- CustomerLoginBundle
- AdminBundle
Оба комплекта реализуют свою собственную аутентификацию с использованием защиты.
Приложение может иметь несколько вариантов использования. Некоторые из них не будут использовать CustomerLoginBundle, некоторые будут.
Как можно динамически загружать соответствующую конфигурацию безопасности во время выполнения в зависимости от того, какие из вышеуказанных пакетов установлены?
Примеры:
Оба пакета установлены, конфигурация безопасности должна выглядеть следующим образом:
encoders:
Acme\Bundle\AdminBundle\Entity\Admin:
algorithm: bcrypt
Acme\Bundle\CustomerLoginBundle\Entity\Customer:
algorithm: bcrypt
providers:
admin_provider:
entity:
class: Acme\Bundle\AdminBundle\Entity\Admin
property: email
customer_provider:
entity:
class: Acme\Bundle\CustomerLoginBundle\Entity\Customer
property: email
chain_provider:
chain:
providers: [customer_provider, admin_provider]
firewalls:
main:
provider: chain_provider
anonymous: true
guard:
entry_point: Acme\Bundle\CustomerLoginBundle\Security\CustomerFormAuthenticator
authenticators:
- Acme\Bundle\AdminBundle\Security\AdminFormAuthenticator
- Acme\Bundle\CustomerLoginBundle\Security\CustomerFormAuthenticator
Установлен только Admin Bundle:
encoders:
Acme\Bundle\AdminBundle\Entity\Admin:
algorithm: bcrypt
providers:
admin_provider:
entity:
class: Acme\Bundle\AdminBundle\Entity\Admin
property: email
chain_provider:
chain:
providers: [admin_provider]
firewalls:
main:
provider: chain_provider
anonymous: true
guard:
authenticators:
- Acme\Bundle\AdminBundle\Security\AdminFormAuthenticator
Я имею в виду, что я мог бы вручную настроить конфигурацию для каждого варианта использования для себя, но это кажется мне немного ленивым решением.