【问题标题】:How to create a DMZ using Symfony/FOSUser?如何使用 Symfony/FOSUser 创建 DMZ?
【发布时间】:2015-12-29 15:22:51
【问题描述】:

我们有一个内置于 Symfony (CMF) 并使用 FOSUser 包的应用程序。我们要求对未完成某些任务的某些用户(例如未注册最新条款和条件的旧用户)实施“DMZ”。我们需要在允许这些用户完成任务之前验证这些用户(例如,在我们确定向他们展示哪些 T 和 C 之前先登录),但在他们完成任务之前,不得允许他们访问其帐户的其余部分(例如同意相关条款和条件)。为澄清起见,用户可能需要完成多项任务(例如,同意不同产品的不同 Ts & Cs),并且只有在完成所有任务后才能获得完全访问权限。

我们目前通过为每个帐户创建两个角色来做到这一点;一个用于“基本”帐户,另一个用于已完成所有相关步骤的帐户。这意味着在成功登录时添加(或删除)其中一个角色,并且感觉不是处理这种情况的最佳方法,因为这些并不是传统意义上的真正“角色”。

我们遇到的一个具体问题(我们目前正在酌情添加登录时的完整角色)是我们无法模拟这些用户,因为模拟机制会从数据库加载用户,并且只有在成功登录时才会授予完整角色并且数据库中不存在。

是否有公认的或规范的 Symfony 方法来实现这一点?我已经尝试过搜索引擎、Symfony 文档和 SO,但看不到任何关于这类事情的讨论。

【问题讨论】:

  • 如何实现一个执行此检查的选民(这是否是一个好主意取决于检查所需权限的成本)?
  • herehere 你的问题与OP 的问题比较相似。如果有帮助,请告诉我。
  • @xabbuh 感谢您的建议,尽管我不确定它是否会增加我们已经在做的事情(我们正在使用登录成功处理程序来检查相关任务并相应地发布角色)。跨度>
  • @DipenShah 我真的不认为该解决方案与我们目前正在实施的解决方案有任何不同(我们已经在登录时动态添加或删除角色)。

标签: php symfony fosuserbundle


【解决方案1】:

@liquorvicar 我认为安全选民是 xabbuh 所说的正确方式。优点是您不需要添加/删除角色,这反过来应该解决您的模拟问题。投票者/逻辑拒绝访问而不是角色。 延伸阅读:http://symfony.com/doc/current/cookbook/security/voters.html#how-to-use-the-voter-in-a-controllerhttp://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html

【讨论】:

  • 那么您将如何实施它?无论多么“完整”,对任何帐户都有一个基本角色,然后实施一个选民来限制您需要手动限制的任何页面?那会在每个请求上运行吗?我们将使用什么作为选民的主题?用户本身?
  • “无论多么“完整”,对任何帐户都有一个基本角色,然后实现一个投票器来限制您需要手动限制的任何页面?是的——“那会在每个请求上运行吗?”是的,您需要保持这种精简,缓存您可以针对用户的内容。 ——“我们将使用什么作为投票者的主题?用户本身?”是的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 2017-08-22
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
相关资源
最近更新 更多