【发布时间】:2013-11-11 21:19:58
【问题描述】:
例如,我将一个新角色授予控制器中当前经过身份验证的用户,如下所示:
$em = $this->getDoctrine()->getManager();
$loggedInUser = $this->get('security.context')->getToken()->getUser();
$loggedInUser->addRole('ROLE_XYZ');
$em->persist($loggedInUser);
$em->flush();
在下一页加载时,当我再次获取经过身份验证的用户时:
$loggedInUser = $this->get('security.context')->getToken()->getUser();
他们没有被授予角色。我猜这是因为用户存储在会话中,需要刷新。
我该怎么做?
如果有什么不同,我正在使用 FOSUserBundle。
编辑:这个问题最初是在 Symfony 2.3 版的上下文中提出的,但下面也有更新版本的答案。
【问题讨论】:
-
数据库更新了吗?
-
是的,数据库已更新。因此,如果我注销并再次登录,则会反映新角色。
-
我正在使用
if is_granted('ROLE_XYZ')在树枝模板中检查新角色。我将其更改为if app.user.hasRole('ROLE_XYZ'),现在它正在工作。奇怪... -
@Nada_Surf - 这是因为 hasRole 检查确切的角色。它忽略角色层次结构.. 例如:是 ROLE_SUPER_ADMIN 有 ROLE_USER, ROLE_ADMIN.. 如果你检查 hasRole('ROLE_ADMIN')--- false,hasGranted('ROLE_ADMIN')--- true
-
感谢 Alex,不过,一旦我退出并重新登录,对
is_granted('ROLE_XYZ')的调用确实会返回 TRUE。
标签: php symfony fosuserbundle