Symfony - настройка аутентификации защиты во время выполнения - PullRequest
0 голосов
/ 21 февраля 2019

В настоящее время я занимаюсь разработкой веб-приложения на 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

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

...