tft*_*ftd 8 provider acl symfony
我试图找出为什么我不能将多个用户提供程序设置为单个提供程序.目前我正在配置ACL.对于用户提供商,我希望有几个"硬编码"用户和用户从数据库加载.
阅读文档说明你不需要有两个用户提供者 - 一个in_memory
用户,一个database
用户.您应该能够将它们组合到单个用户提供程序中(这正是我要做的).
建议的配置是:
security:
providers:
main_provider:
memory:
users:
foo: { password: test }
entity:
class: Acme\UserBundle\Entity\User,
property: username
Run Code Online (Sandbox Code Playgroud)
我的配置是:
security:
providers:
main_provider:
memory:
users:
foo: { password: test }
entity:
class: Company\EntitiesBundle\Entity\User,
property: username
Run Code Online (Sandbox Code Playgroud)
不幸的是我遇到了这个例外
InvalidConfigurationException: Invalid configuration for path "security.providers.main_provider": You cannot set multiple provider types for the same provider
Run Code Online (Sandbox Code Playgroud)
但是,如果我设置两个不同的提供程序并将它们链接起来,那么它可以正常工作.我无法弄清楚为什么会这样?它在文档中明确说明 - you can accomplish this even more easily by combining the two sources into a single provider
.
我在这里错过了什么?
为什么不连锁供应商?您所引用的文档指出您可以使用多个用户提供程序“ ……通过创建一个将两者链接在一起的新提供程序”。
http://symfony.com/doc/current/book/security.html#using-multiple-user-providers
每个身份验证机制(例如 HTTP 身份验证、表单登录等)仅使用一个用户提供程序,并且默认情况下将使用第一个声明的用户提供程序。但是,如果您想 通过配置指定一些用户并在数据库中指定其余用户,该怎么办?这可以通过创建一个将两者链接在一起的新提供者来实现。
现在,所有身份验证机制都将使用 chain_provider,因为它是第一个指定的。反过来,chain_provider 将尝试从in_memory和user_db提供程序加载用户。
您所要做的就是设置一个连锁提供商。
# 应用程序/配置/security.yml 安全: 提供者: 主要提供商: 链: 提供者:[内存提供者,实体提供者] 内存提供者: 记忆: 用户: foo: { 密码: 测试 } 实体提供者: 实体: 类:公司\EntitiesBundle\Entity\User 属性:用户名