Symfony 2 FOS UserBundle用户没有';t获取组';的角色


Symfony 2 FOS UserBundle users doesn't get group's role

我正在使用FOS用户捆绑包来管理对我的应用程序的访问。由于我需要一个组概念,我已经实现了文档组中描述的我需要的东西。

创建用户和组一切都很好,但当我登录用户并试图获得他的角色时,他除了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;
[...]
}

My User在RegisterUser表中没有设置任何角色,但设置了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什么也没展示。

我是否使用了一个不好的函数来检查组角色?还是我做错了什么?

一个解决方案是通过获取groups_role

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

但是,还有其他方法可以做到这一点吗?

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

来自使用带有FOSUserBundle的组

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

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

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

app.user.hasGroup('ADMIN')