我正在尝试使用 FOSUserBundle 更改用户的角色。问题是:如果用户同时登录,他必须重新登录才能看到新角色。
有什么解决办法吗?
根据Security Configuration Reference,有一个always_authenticate_before_granting
选项。没有太多关于这方面的信息,但我已经尝试过从数据库加载自定义角色并且它成功了。看起来每次您发出新请求时,安全组件都会重新加载角色。
因此,如果您想确保您的角色在您的用户会话中被刷新和重新加载,只需将此选项设置true
为security.yml
:
# app/config/security.yml
security:
always_authenticate_before_granting: false
在你的控制器中试试这个:
$this->get('fos_user.user_manager')->refreshUser($user);
参见 FOS/UserBundle/Model/UserManager.php
1:您必须在防火墙配置中启用 switch_role: true。2:接下来你必须允许ROLE_ADMIN的角色能够切换到另一个角色。3:只需链接到 ?_switch_role=userNameCanonical
它主要由 symfony security fos 完成,与角色切换无关。