我正在使用 FOS User Bundle 来管理对我的应用程序的访问。
由于我需要一个团体概念,我已经按照文档中的描述实现了我需要的内容group https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/groups.md .
创建用户和组一切都很好,但是当我使用用户登录并尝试获取他的角色时,他除了 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 不显示任何内容。
我是否使用了错误的函数来检查组角色?
或者我做错了什么?
解决方案是通过以下方式获取 groups_role
{% if app.user != null and app.user.group.hasRole('ROLE_ADMIN') %}
但还有其他方法可以做到这一点吗?