php - 使 Symfony2 中特定用户的 session 无效

标签 php symfony

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

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

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

请注意,在后台进程中,我们没有可用的事件 security.contextrequest。因此,这样的代码不起作用:

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

最佳答案

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

1) 通过 security.always_authenticate_before_granting

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

请参阅此 SO 问题/答案: Change the role of a distant user without having to relog

2) 通过EquatableInterface:

您需要实现 isEqualsTo(User),这反过来应该将所有内容与 User 类进行比较,包括角色。

请参阅此链接:Create a User Class

3) 最后,您可以使用DBMS 来存储 session 。然后,只需找到记录并将其删除即可。

关于php - 使 Symfony2 中特定用户的 session 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27987089/

相关文章:

forms - 在公共(public) REST 上下文中处理 symfony 表单中的 CSRF token

symfony - Sonata Block Bundle 中的上下文是什么

symfony - 有没有办法在 Symfony2 中获取当前 URL 和当前端口号?

php - 如何使用PHP打印此模式?

php - 在多个 MySQL 表中搜索大量术语的最有效方法是什么?

php - Wordpress - 根据元字段内容获取帖子

Phpmyadmin 没有显示 mysql 数据库中的所有表

php - 显示所有字体文件字符

php - Symfony2 带有复选框表单的扩展表

php - 不含 FOSUserBundle 的 HWIOAuthBundle