3

我正在使用 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;

[...]
}

我的用户在 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 不显示任何内容。

我是否使用了错误的功能来检查 groupe 角色?还是我做错了什么?

一个解决方案是让 groups_role 通过

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

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

4

1 回答 1

1

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

来自使用 FOSUserBundle 的组

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

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

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

app.user.hasGroup('ADMIN')
于 2013-07-11T06:10:42.307 回答