В настоящее время я занимаюсь разработкой веб-приложения на 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
Установлен только комплект администратора:
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
Я имею в виду, что я мог бы вручную настроить конфигурациюдля каждого случая использования для себя, но это кажется мне немного ленивым решением.