我想知道用户是否具有'VIEW_GEOLOC_DATA'角色,但是使用twig函数is_granted()
时遇到问题。
如果我在模板中使用:
Roles : {{ dump(app.user.getRoles()) }}
is_granted('ROLE_SUPER_ADMIN') : {{ dump(is_granted('ROLE_SUPER_ADMIN')) }}
is_granted('VIEW_GEOLOC_DATA') : {{ dump(is_granted('VIEW_GEOLOC_DATA')) }}
这是我在渲染时得到的:
array(2) {
[0]=>
string(16) "ROLE_SUPER_ADMIN"
[1]=>
string(16) "VIEW_GEOLOC_DATA"
}
is_granted('ROLE_SUPER_ADMIN') : bool(true)
is_granted('VIEW_GEOLOC_DATA') : bool(false)
我试图登录和退出,清空symfony的缓存 我还尝试切换我的用户getRoles()方法返回的数组中的角色顺序:函数is_granted只会考虑数组的第一个角色
答案 0 :(得分:9)
如果您希望Symfony2能够处理您的角色,那么您的角色需要以“ROLE _”开头。
更改
'VIEW_GEOLOC_DATA'
到
'ROLE_VIEW_GEOLOC_DATA'
当然,您需要在配置中更改此设置并添加新角色。
如果您使用的是专门的角色类,则此答案不适用。
答案 1 :(得分:8)
我最终在我的hasRole
班级中创建了一个新方法User
:
public function hasRole($role)
{
return in_array($role, $this->getRoles());
}
然后,在模板中,我使用:
{% if app.user.hasRole('ROLE_VIEW_GEOLOC_DATA') %}
{# do something #}
{% endif %}
修改强>
正如@JonnyS所说,角色可能必须以ROLE_
开头才能使用is_granted
Symfony的功能。未经测试。
答案 2 :(得分:1)
创建一个检查此选项的安全选民。 http://symfony.com/doc/current/cookbook/security/voters_data_permission.html
这比在实体上为此创建方法要清晰得多。