使用从服务定义的链提供者
Use the chain provider defined from a service
我在我的应用中使用了多个用户提供商:
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);
}
}
如何显式使用链提供程序?
供应商被初始化为服务,您可以对链供应商进行同样的操作:
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
的示例
因此您将自己创建用户提供者链作为一项服务(这实际上是安全包对您的配置所做的)并在两个地方使用它。
通过查看 the code of SecurityBundle,您就可以使用服务 security.user.provider.concrete.{name}
,所以在您的情况下 security.user.provider.concrete.chain_provider
我在我的应用中使用了多个用户提供商:
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);
}
}
如何显式使用链提供程序?
供应商被初始化为服务,您可以对链供应商进行同样的操作:
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
因此您将自己创建用户提供者链作为一项服务(这实际上是安全包对您的配置所做的)并在两个地方使用它。
通过查看 the code of SecurityBundle,您就可以使用服务 security.user.provider.concrete.{name}
,所以在您的情况下 security.user.provider.concrete.chain_provider