【问题标题】:Is it possible to inject the current firewall's user provider service into a custom service?是否可以将当前防火墙的用户提供程序服务注入自定义服务?
【发布时间】:2018-10-20 15:48:52
【问题描述】:

我的一个项目面临着一个很好的挑战。

我需要在我正在开发的第三方捆绑包的服务中注入为防火墙定义的用户提供程序。 我无法在我的服务中明确定义它,因为我想实现这一点,当从不同的防火墙调用服务或用户更改security.yaml 中的提供者时,我的服务会适应使用权限提供者。

我能够完成的是通过注入RequestStackFirewallMap 并使用当前请求获取FirewallConfig 来获取提供者的名称,但仅此而已,只是名称。

我想知道是否有办法做到这一点。文档中没有关于此的内容。但我确信一定有办法,因为 Security Bundle 中的身份验证侦听器也是如此。

我正在阅读您的巧妙回复! :)

【问题讨论】:

  • 您使用的是什么版本? 4.0?
  • 是的。我正在使用 4。

标签: php symfony authentication symfony-security


【解决方案1】:

您是否尝试过查看FirewallConfig 课程?它没有很好地记录,但它存在,并且可以通过$firewallMap->GetFirewallConfig($request) 访问。关于防火墙的所有信息都存储在此对象中,以及提供程序 ($firewallConfig->getProvider())。

如果你已经能够注入FirewallMap配置,我想你也可以通过当前Request对象作为参数来获取FirewallConfig

public class YourService()
{
    ...
    public function YourMethod(Request $request)
    {
        // Your FirewallMap injection
        ...

        $firewallConfig = $firewallMap->getFirewallConfig($request);

        // Proceed with $firewallConfig information
    }
}

更多关于FirewallConfighere

【讨论】:

  • 感谢您的帮助莱昂。对不起,我不够清楚,我在浪费你的时间。这就是我的意思,我可以通过注入RequestStackFirewallMap 获得提供者的名称。在防火墙地图中,我调用$map->getFirewallConfig($request)->getProvider()。但这只会返回已配置的提供者的名称。也许还有其他服务可以解析提供者名称,但我找不到任何东西。有点困在这里。
  • 您能否详细说明您需要从用户提供商那里得到什么?
  • 通过用户名加载用户。
猜你喜欢
  • 1970-01-01
  • 2019-03-14
  • 2016-09-02
  • 2018-10-14
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多