Twig / Symfony2:使用is_granted倍增角色

时间:2013-06-12 13:29:51

标签: symfony twig symfony-2.1

我想知道用户是否具有'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只会考虑数组的第一个角色

3 个答案:

答案 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

这比在实体上为此创建方法要清晰得多。