0

我在我的应用程序中使用多个用户提供程序:

security:
    providers:
        chain_provider:
            chain:
                providers: [entity, json]
        entity:
            id: myapp.entity.user_provider
        json:
            id: myapp.json.user_provider

现在我需要从服务加载用户

services:
    myapp.my.service:
        class: AppBundle\Services\My
        argument: [@the.defined.chain.provider]
// AppBundle\Services\My
namespace AppBundle\Services;
class My
{
    public function loadUser($username)
    {
        return $this->userProvider->loadUserByUsername($username);
    }
}

如何明确使用链提供者?

4

2 回答 2

1

提供者被初始化为服务,你可以对链提供者做同样的事情:

services:
    the.defined.chain.provider:
        class: Symfony\Component\Security\Core\User\ChainUserProvider
        arguments: [ [ @myapp.entity.user_provider, @myapp.json.user_provider ] ]

然后在您的 security.yml 文件中,将您的提供程序替换为:

security:
    providers:
        default: 
            id: the.defined.chain.provider

并在您的服务文件中保留您的示例myapp.my.service

因此,您将自己创建用户提供程序链作为服务(这实际上是安全包对您的配置所做的事情)并在两个地方使用它。

于 2015-07-24T14:06:26.387 回答
1

通过查看SecurityBundle 的代码,您就可以使用该服务security.user.provider.concrete.{name},所以在您的情况下security.user.provider.concrete.chain_provider

于 2015-07-24T23:16:56.407 回答