繁体   English   中英

无法检查是否授予角色

[英]Can't check if a role is granted

我必须在用户登录时为用户设置动态角色,因此我在登录成功时使用以下功能创建了服务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 ,但如果他在登录时检查此角色,则将添加该角色。基本上,用户在每个会话中都有一个角色

将角色传递给is_granted()函数时,Symfony安全层使用的RoleVoter类将从令牌而非用户对象中读取角色。 这意味着您也必须相应地更新令牌。

我找到的解决方案是创建自己的函数来检查用户是否具有特定角色:

public function isGranted($role)
{
    return in_array($role, $this->getRoles());
}

现在我可以使用{% if app.user.isGranted("ROLE_FLEX") %}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM