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