我正在与内部用户和外部用户建立一个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角色。