我们有一个使用Symfony(CMF)构建的应用程序并使用FOSUser包。我们要求为尚未完成某些任务的某些用户(例如尚未注册最新条款和条件的旧用户)实施“DMZ”。我们需要在允许这些用户完成任务之前对其进行验证(例如,在我们确定要显示哪些Ts和C之前登录)但是在完成任务之前不允许他们访问其余的帐户(例如同意相关的条款和条件)。为了澄清,用户可能需要完成多个任务(例如,同意不同产品的不同Ts& Cs),并且只有在所有任务完成后才能获得完全访问权。
我们目前通过为每个帐户创建两个角色来实现此目的;一个用于“基本”帐户,另一个用于已完成所有相关步骤的帐户。这意味着在成功登录时添加(或删除)其中一个角色,并且感觉不是处理这种情况的最佳方式,因为这些不是传统意义上的“角色”。
我们遇到的一个特定问题(我们目前正在登录时添加完整角色)是我们无法冒充这些用户,因为模拟机制会从数据库加载用户,而只有成功登录时才会授予完整角色。在数据库中不存在。
是否有公认的或规范的Symfony方法来实现这一目标?我已经尝试过搜索引擎,Symfony文档和SO,但是看不到任何关于此类事情的讨论。
答案 0 :(得分:1)
@liquorvicar我认为,正如xabbuh所说,安全选民是正确的选择。优点是您不需要添加/删除角色,而角色又可以解决您的模拟问题。选民/逻辑拒绝访问而不是角色。 进一步阅读:http://symfony.com/doc/current/cookbook/security/voters.html#how-to-use-the-voter-in-a-controller和http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html