Пользовательская конфигурация UserProvider Symfony 4

Я хотел бы создать свой собственный LdapUserProvider, чтобы применить другую роль в отношении имени пользователя. На самом деле мой LDAP очень хорошо работает со стандартным LdapUserProvider от symfony.

Как говорят документ LDAP:

Провайдер пользователя ldap, использующий класс LdapUserProvider. Как и все другие поставщики пользователей, его можно использовать с любым поставщиком аутентификации.

Как я могу использовать настраиваемый пользовательский провайдер, пожалуйста?

security:
        providers:
            my_ldap:
                ldap:
                    service: Symfony\Component\Ldap\Ldap
                    base_dn: o=xxx
                    search_dn: cn=xxx Downloader,ou=ApplicationUsers,o=xxx
                    search_password: 'xxx'
                    default_roles: [ROLE_USER]
                    uid_key: uid
                    filter: "{uid_key} = {username}"

        firewalls:
            dev:
                pattern: ^/(_(profiler|wdt)|css|images|js)/
                security: false
            main:
                anonymous: true
    #            provider: App\Services\MyLdapUserProvider
                logout:
                    csrf_token_id: logout
                    path: /logout
                    target: /login
                form_login_ldap:
                    csrf_parameter: _csrf_token
                    login_path: login
                    check_path: login
                    service: Symfony\Component\Ldap\Ldap
                    dn_string: 'o=xxx'
                    query_string: 'uid = {username}'
                    target_path_parameter: home
                    default_target_path:  /home

        access_control:
            - { path: /index, role: IS_AUTHENTICATED_FULLY }
            - { path: ^/admin, roles: ROLE_ADMIN }

Редактировать: Спасибо за ответ @Vyctorya

Я думаю, это то, что мне нужно!

В security.yaml я вызываю службу так:

security:
        providers:
            myLdap:
                id: App\Services\MyLdapUserProvider

и это мой сервис.yaml:

services:
        App\Services\MyLdapUserProvider:
            arguments:
                $ldap: '@Symfony\Component\Ldap\LdapInterface'
                $baseDn: 'o=xxx'
                $searchDn: 'cn=xxx Downloader,ou=ApplicationUsers,o=xxx'
                $searchPassword: 'xxx'
                $defaultRoles:
                    'ROLE_USER'
                $uidKey: 'uid'
                $filter: '{uid_key} = {username}'

        Symfony\Component\Ldap\LdapInterface:
            arguments: ['@Symfony\Component\Ldap\Adapter\ExtLdap\Adapter']

        Symfony\Component\Ldap\Adapter\ExtLdap\Adapter:
            arguments:
                - host: ....

Я не понимаю, почему baseDn не определен...

Не удается выполнить автоподключение службы "App\Services\MyLdapUserProvider": аргумент "$baseDn" метода "Symfony\Component\Security\Core\User\LdapUserProvider::__construct()" имеет тип "строка", вы должны настроить его значение явно .

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
663
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Посмотрите на этот Документация Symfony.

Вам нужно настроить конфигурацию:

security:
    providers:
        enter_you_custom_name_here:
            id: AppBundle\Security\User\UserProvider

и создайте UserProvider. Расширить Symfony\Component\Security\Core\User\LdapUserProvider и переопределить loadUserByUsername($username)

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