Symfony 2 FOS UserBundle用户没有获得组的角色

时间:2012-08-21 14:01:08

标签: php symfony fosuserbundle roles

我正在使用FOS用户捆绑包来管理对我的应用的访问。 由于我需要一个群体概念,我已按照文档group中的描述实现了我需要的内容。

创建用户和群组的一切都很好但是当我与用户一起登录并尝试获得他的角色时,他只有USER_ROLE。

这是我的用户

use FOS\UserBundle\Entity\User as BaseUser;
class RegistredUser extends BaseUser
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\ManyToOne(targetEntity="myBundle\Entity\RegistredUserGroup")
 */
protected $group;
 [...]
}

这是我的小组课程

use FOS\UserBundle\Entity\Group as BaseGroup;
class RegistredUserGroup extends BaseGroup
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

[...]
}

我的用户在RegistredUser表中没有设置任何角色,但设置了groupId。 该组具有ROLE_ADMIN角色。

在我的布局中,我尝试检查这样的角色:

    {% if is_granted('ROLE_ADMIN') %}
    <dl class="menuIcon">
                    <dd><img src="{{ asset('bundles/bundle/images/user.png') }}" alt=""></dd>
                    <dd>{{ "menu.gererReferentiel"|trans }}</dd>
                    </dl>
    {% endif %}

但Symfony没有显示任何内容。

我是否使用不良功能检查GROpe角色? 或者我做错了什么?

解决方案是通过

获取groups_role
{% if app.user != null and  app.user.group.hasRole('ROLE_ADMIN') %}

但还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

  

FOSUserBundle允许您将群组与您的用户相关联。团体是   一种对角色集合进行分组的方法。一个小组的角色将是   授予属于它的所有用户。

来自Using Groups With FOSUserBundle

在你的情况下,你不应该检查

app.user.group.hasRole('ROLE_ADMIN')

如果用户有一个具有admin角色的组,但检查当前用户是否是某个组的成员,例如

app.user.hasGroup('ADMIN')