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

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

0 ответов

Другие вопросы по тегам