6

我想知道用户是否具有 '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 的缓存。
我还尝试切换我的 User 的 getRoles() 方法返回的数组中角色的顺序:函数 is_granted 只会考虑数组的第一个角色

4

3 回答 3

9

如果您希望 Symfony2 处理您的角色,那么您的角色需要以“ROLE_”开头。

改变

'VIEW_GEOLOC_DATA' 

'ROLE_VIEW_GEOLOC_DATA'

当然,您需要在配置中更改它并添加新角色。

如果您使用的是专用角色类,则此答案不适用。

于 2013-06-13T20:27:15.013 回答
8

我最终hasRole在我的UserClass 中创建了一个新方法:

public function hasRole($role)
{
    return in_array($role, $this->getRoles());
}

然后,在模板中,我使用:

{% if app.user.hasRole('ROLE_VIEW_GEOLOC_DATA') %}
    {# do something #}
{% endif %}

编辑: 正如@JonnyS 所说,角色可能必须从ROLE_使用is_grantedSymfony 的功能开始。没有测试。

于 2013-07-04T11:10:34.570 回答
1

创建一个安全选民来检查这一点。 http://symfony.com/doc/current/cookbook/security/voters_data_permission.html

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

于 2015-01-25T14:20:51.973 回答