Как получить роли пользователя из базы данных при аутентификации с помощью LDAP в Symfony? - PullRequest
0 голосов
/ 18 июня 2019

Я настраиваю экстрасеть с внутренними и внешними пользователями, которым назначаются разные роли.Внешние пользователи проходят проверку подлинности и получают свои роли из локальной базы данных.Внутренние пользователи проходят проверку подлинности с помощью LDAP и должны получать свои роли из базы данных, но это не работает (даже если они существуют в базе данных). Как я могу заставить внутренних пользователей (прошедших проверку подлинности с помощью LDAP) получать свои роли из базы данных?

Я использую Symfony 4.2 и не нашел ничего, чтобы попробовать (На каждое найденное мной сообщение, касающееся той же проблемы, нет ответа)

security.yaml:

parameters:
    env(LDAP_BASE): ''
    env(LDAP_SEARCH): ''
    env(LDAP_PASSWORD): ''
    env(LDAP_FILTER): ''

security:
    providers:
        chain_provider:
            chain:
                providers: [user_ldap, user_db]
        user_ldap:
            ldap:
                service: Symfony\Component\Ldap\Ldap
                base_dn: '%env(resolve:LDAP_BASE)%'
                search_dn: '%env(resolve:LDAP_SEARCH)%'
                search_password: '%env(resolve:LDAP_PASSWORD)%'
                uid_key: 'sAMAccountName'
                filter: '%env(resolve:LDAP_FILTER)%'
                default_roles: ROLE_INTERNAL_USER
        user_db:
            entity:
                class: App\Entity\User
                property: username
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            provider: chain_provider
            anonymous: true
            form_login_ldap:
                login_path: /login
                check_path: /login
                provider: user_ldap
                service: Symfony\Component\Ldap\Ldap
                username_parameter: 'username'
                password_parameter: 'password'
                dn_string: 'MYDOMAIN\{username}'
            form_login:
                login_path: /login
                check_path: /login
                provider: user_db
                username_parameter: 'username'
                password_parameter: 'password'
            logout:
                path: logout
    role_hierarchy:
        ROLE_STOCKS_WRITE: ROLE_INTERNAL_USER
        ROLE_STOCKS_READONLY: ROLE_EXTERNAL_USER
    access_control:
        - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/stocks, roles: [ROLE_INTERNAL_USER, ROLE_STOCKS_READONLY] }
        - { path: ^/, roles: [ROLE_INTERNAL_USER, ROLE_EXTERNAL_USER] }
    encoders:
        App\Entity\User:
            algorithm: bcrypt

Я ожидаю, что внутренний пользователь получит роль ROLE_STOCKS_WRITE (как определено в локальной базе данных), но он получит только роль ROLE_INTERNAL_USER.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...