Як використовувати декілька постачальників користувачів

Дата оновлення перекладу 2023-06-23

Як використовувати декілька постачальників користувачів

Кожен механізм аутентифікації (наприклад, HTTP-аутентифікація, форма входу у систему тощо) використовує тільки одного постачальника користувачів і буде використовувати першого оголошеного постачальника користувачів за замовчуванням. Але що, якщо ви хочете вказати кілька користувачів через конфігурацію, а решту ваших користувачів у DB? Це можливо, якщо створити нового постачальника, який зв'яже конфігурацію і базу даних:

1
2
3
4
5
6
7
8
9
10
11
12
# app/config/security.yml
security:
    providers:
        chain_provider:
            chain:
                providers: [in_memory, user_db]
        in_memory:
            memory:
                users:
                    foo: { password: test }
        user_db:
            entity: { class: AppBundle\Entity\User, property: username }

Тепер усі механізми аутентифікації використовуватимуть chain_provider, оскільки він вказаний першим. chain_provider, своєю чергою, буде пробувати завантажити користувача з постачальників in_memory і user_db.

Ви також можете сконфігурувати брандмауер або індивідуальні механізми аутентифікації, щоб вони використовували конкретного постачальника. Знову ж таки, якщо постачальник не вказаний ясно, то завжди буде використовуватися перший:

1
2
3
4
5
6
7
8
9
10
11
# app/config/security.yml
security:
    firewalls:
        secured_area:
            # ...
            pattern: ^/
            provider: user_db
            http_basic:
                realm: 'Secured Demo Area'
                provider: in_memory
            form_login: ~

У цьому прикладі, якщо користувач намагається виконати вхід через HTTP-аутентифікацію, то система аутентифікації використовуватиме постачальника користувачів in_memory. Але якщо користувач намагається виконати вхід через форму входу, то буде використано постачальник user_db (оскільки він встановлений за замовчуванням для всього брандмауера).

Щоб дізнатися більше інформації про постачальників користувачів і конфігурації брандмауера, дивіться Довідник конфігурації Security (SecurityBundle).