Symfony2中特定用户的会话无效

时间:2015-01-16 15:17:21

标签: php symfony

我编写了一个系统,其中后台PHP进程(使用RabbitMQBundle编写)处理来自消息队列的消息。工作进程更新用户帐户。这可能包括用户角色的更改。

问题是用户在登录时没有注意到他的角色发生任何变化。新角色只有在注销后才能应用。从安全角度来看,这是不可取的。一旦管理员在后端系统中取消该用户的权限,用户就应该放弃任何角色。

问题是:如何使用新角色更新特定用户的会话?或者当不可能时,会话如何失效?

请注意,在后台流程中,我们无法使用我们可以使用的有效security.contextrequest。因此,这样的代码不起作用:

$this->get('security.context')->setToken(null);
$this->get('request')->getSession()->invalidate();

1 个答案:

答案 0 :(得分:2)

您可以通过多种方式解决此问题:

1)通过security.always_authenticate_before_granting

您可以强制Symfony刷新每个请求的用户,有效地重新加载所有角色。

看到这个问题/答案: Change the role of a distant user without having to relog

2)通过EquatableInterface

您需要实施isEqualsTo(User),而User应该将所有内容与DBMS类进行比较,包括角色。

请参阅此链接:Create a User Class

3)最后,您可以使用{{1}}来存储会话。然后,只需找到记录并将其删除即可。