【发布时间】:2017-09-08 05:02:51
【问题描述】:
我必须在用户登录时为他设置动态角色,所以我创建了一个服务LoginSuccessHanlder,在登录成功时使用此功能:
public function onAuthenticationSuccess(Request $request, TokenInterface $token) {
$response = null;
$user = $this->token->getToken()->getUser();
$poste = $request->get('_poste');
$user->addRole('ROLE_'.strtoupper($poste));
$this->em->persist($user);
$this->em->flush();
if ($this->authorizationChecker->isGranted('ROLE_USER')) {
$response = new RedirectResponse($this->router->generate('homepage'));
$response->headers->setCookie(new Cookie('poste', $poste));
}
return $response;
}
所以在这里,由于登录表单中的一个字段_poste,我向用户添加了一个新角色
.登录后,我应该可以:
{% if is_granted("ROLE_FLEX") %}
message
{% endif %}
但是没有消息
但如果我这样做:
{{ dump(app.user.roles) }}
我在数组中有ROLE_FLEX 的角色,为什么我不能用is_granted 函数检查角色?我错过了什么?
有关信息,我正在使用 FOSUserBundle
编辑
每次用户注销时,我都会删除该角色,因此当用户注销时,他不再拥有ROLE_FLEX,但如果他在登录时检查此角色,则会添加该角色。基本上,用户有一个角色每节课
【问题讨论】:
-
可以显示
addRole功能码吗? -
@i.am.michiel
addRole函数由 FOSUserBundle 提供 -
角色是否保留?在每次请求时,FOSUserBundle 都会从数据库(或任何您的提供者)中重新加载用户和角色。
-
仅作为测试,如果用户注销然后重新登录系统,会出现消息(检查正常)?
-
@i.am.michiel 是的,我在登录时检查了我的数据库,并且该角色保持不变
标签: php symfony twig user-roles