Как использовать несколько поставщиков пользователей
Дата обновления перевода 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).