在Symfony中使用LDAP进行身份验证时,如何从数据库中获取用户角色?

时间:2019-06-18 15:04:05

标签: symfony

我正在与内部用户和外部用户建立一个Extranet,为其分配不同的角色。 外部用户进行身份验证并从本地数据库获取其角色。 内部用户通过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角色。

0 个答案:

没有答案