Php 在constructor symfony进行用户检查

Php 在constructor symfony进行用户检查,php,symfony,Php,Symfony,我的问题是: 当我试图调用构造函数中登录用户的任何操作时,他总是为NULL。 我知道这是因为它尚未通过symfony防火墙加载。 有没有其他方法可以达到这种效果 1.我创建了一个在构造函数中的所有控制器中使用的类。 2.该类检查用户是否具有与数据库中的ip相同的ip,或者我希望对用户执行的其他操作 我试着用 Symfony\Component\Security\Core\Security 及 Symfony\Component\Security\Core\Authentication\Token

我的问题是: 当我试图调用构造函数中登录用户的任何操作时,他总是为NULL。
我知道这是因为它尚未通过symfony防火墙加载。
有没有其他方法可以达到这种效果

1.我创建了一个在构造函数中的所有控制器中使用的类。
2.该类检查用户是否具有与数据库中的ip相同的ip,或者我希望对用户执行的其他操作

我试着用

Symfony\Component\Security\Core\Security

Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface


但它什么也没做。

我想我正确地理解了你的问题

如果您希望根据请求者的IP地址和/或任何其他条件(例如用户loggedIn+hasIP+…)授予对资源/操作的访问权限。尝试检查选民:

  • 我建议您看看,这样您就可以看到更适合您需求的解决方案

您需要创建一个自定义投票者,将其注册到服务容器中,然后根据用户和用户的IP(从请求栈获取),您的投票者将允许用户执行操作


注意,在控制器中,您不必实现任何功能:除了使用所需的角色定义添加annonation@security或填充security.yml(取决于项目配置),所有的魔法都将发生在安全层。

在Laravel中,这在很大程度上依赖于Symfony您可以使用中间件来实现此目的-但不确定Symfony是否使用此概念。只需将$security作为实例变量存储在构造函数中,直到您的控制器需要它时才获取用户。创建控制器时,用户将可用。我必须检查所有方法的$security,因此我更喜欢在构造中使用它。您需要后退一步,查看请求侦听器并了解请求/响应工作流。尤其是控制器侦听器。另外,当有可用的替代方案时,选择非工作解决方案似乎有点奇怪。例如,我如何根据记录的用户id加载产品购物车。我已经打破了DRY规则并复制/粘贴了所有控制器方法的代码,因为我无法将其加载到构造中?不要重复dreak DRY,但不要忘记单一责任。对我来说,听起来您希望在某些服务/控制器的上下文中具有用户订单的可用用户对象(订单是用户的一部分,因此安全层不能关心用户内部)。对于安全层,这里没有什么可做的。安全层必须根据环境(令牌/IP..)对用户进行身份验证。它在成功时为您提供用户对象,以便在控制器的上下文中有可用的用户实体。相关订单的加载可以通过原则来完成:只需在订单和用户实体之间建立任意关系。