Как использовать несколько поставщиков пользователей

Дата обновления перевода 2023-06-29

Как использовать несколько поставщиков пользователей

Каждый механизм аутентификации (например, 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).