【问题标题】:Symfony2 ACL - can't set multiple user sources on a single providerSymfony2 ACL - 不能在单个提供者上设置多个用户源
【发布时间】:2012-11-18 16:47:43
【问题描述】:

我试图弄清楚为什么我不能将多个用户提供者设置为一个提供者。 目前我正在配置 ACL。对于用户提供者,我希望有几个“硬编码”用户和从数据库加载的用户。

阅读documentation 说明您不需要拥有两个用户提供程序 - 一个用于in_memory 用户,一个用于database 用户。您应该能够将它们组合成一个用户提供程序(这是我正在尝试做的)。

建议的配置是:

security:
    providers:
        main_provider:
            memory:
                users:
                    foo: { password: test }
            entity:
                class: Acme\UserBundle\Entity\User,
                property: username

我的配置是:

security:
    providers:
        main_provider:
            memory:
                users:
                    foo: { password: test }
            entity:
                class: Company\EntitiesBundle\Entity\User,
                property: username

不幸的是,我得到了这个例外:

InvalidConfigurationException: Invalid configuration for path "security.providers.main_provider": You cannot set multiple provider types for the same provider

但是,如果我设置两个不同的提供程序并将它们链接起来,它就可以正常工作。 我不明白为什么会发生这种情况?文档中已明确说明 - you can accomplish this even more easily by combining the two sources into a single provider
我在这里错过了什么?

【问题讨论】:

    标签: symfony acl provider


    【解决方案1】:

    为什么不链接供应商?您所引用的文档指出,您可以使用多个用户提供程序“...通过创建一个将两者链接在一起的新提供程序”。

    http://symfony.com/doc/current/book/security.html#using-multiple-user-providers

    每种身份验证机制(例如 HTTP 身份验证、表单登录等)仅使用一个用户提供程序,并且默认使用第一个声明的用户提供程序。但是,如果您想通过配置指定少数用户并在数据库中指定其余用户,该怎么办?这可以通过创建一个将两者链接在一起的新提供者来实现。

    现在,所有的身份验证机制都将使用 chain_provider,因为它是第一个指定的。 chain_provider 将依次尝试从 in_memory user_db providers 加载用户。

    您所要做的就是设置一个链提供商。

    # app/config/security.yml 安全: 提供者: main_provider: 链: 提供者:[memory_provider,entity_provider] memory_provider: 记忆: 用户: 富:{密码:测试} entity_provider: 实体: 类:公司\实体捆绑\实体\用户 属性:用户名

    【讨论】:

    • 只是因为该解决方案根本不起作用,尽管它已记录在案。我已经在一个干净的 symfony 源上尝试过这个,但当时它仍然无法正常工作。从那以后我就不需要这个了,所以我不知道它现在是否已修复。无论如何,感谢您提交答案!不幸的是,我无法验证此解决方案是否有效。我只会投票,当我有时间测试它时,如果它有效,我会接受答案:)
    • 很抱歉让您久等了。我忙于其他项目,最近才有时间进行实验。看来此问题已在 2.4 中解决,并且您提供的示例运行良好。感谢您的帮助!
    【解决方案2】:

    您使用的是哪个 Symfony 版本?如果是 2.0,则在 2.0 文档中配置略有不同:

    # app/config/security.yml
    security:
        providers:
            main_provider:
                users:
                    foo: { password: test }
                entity: { class: Acme\UserBundle\Entity\User, property: username }
    

    注意memory 键丢失。

    【讨论】:

    • 问题是关于多个供应商。此答案适用于单个提供商。
    猜你喜欢
    • 1970-01-01
    • 2013-04-15
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多