【问题标题】:Access forbidden based user role after change it更改后访问基于禁止的用户角色
【发布时间】:2026-02-19 13:10:02
【问题描述】:

在我的网站中,我想让一些用户能够通过单击按钮来更改他们的角色。我通过以下方式实现它:

$post = Request::createFromGlobals();
if($post->request->has('change') && $user->hasRole('ROLE_MEDIA') == False){
        $em = $this->getDoctrine()->getManager();
        $user->setRoles(array('ROLE_MEDIA'));
        $em->flush();
 }

它工作正常,检查数据库后,我可以在主控制器中恢复标志而没有问题。问题如下:单击按钮并访问具有 ROLE_MEDIA 的用户的受限页面后,我收到 403 错误。 Symfony 似乎没有检测到新的用户角色。我正在使用以下代码限制某些页面:

/**
*
* @Security("has_role('ROLE_MEDIA')")
*/

我不明白这个问题,因为我可以在我的控制器中访问正确的值...在此先感谢

【问题讨论】:

  • 尝试检查是否找到解决方案here
  • 注销后重新登录还能用吗?
  • 感谢您提供@VitaliyRyaboy 的网址!我可以在那里找到解决方案,谢谢您的帮助

标签: php symfony security controller restriction


【解决方案1】:

我发现最简单的解决方案是通过重新生成会话 ID 来刷新会话:

$post = Request::createFromGlobals();
if($post->request->has('change') && $user->hasRole('ROLE_MEDIA') == False){
        $em = $this->getDoctrine()->getManager();
        $user->setRoles(array('ROLE_MEDIA'));
        $em->flush();
        $this->get('session')->migrate();
 }

【讨论】:

    最近更新 更多