Lau*_* W. 6 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')) }}
Run Code Online (Sandbox Code Playgroud)
这是我在渲染时得到的:
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)
Run Code Online (Sandbox Code Playgroud)
我试图登录和退出,清空symfony的缓存.
我还试图切换我的用户getRoles()方法返回的数组中的角色顺序:函数is_granted只会考虑数组的第一个角色
如果您希望Symfony2能够处理您的角色,那么您的角色需要以"ROLE_"开头.
更改
'VIEW_GEOLOC_DATA'
Run Code Online (Sandbox Code Playgroud)
至
'ROLE_VIEW_GEOLOC_DATA'
Run Code Online (Sandbox Code Playgroud)
当然,您需要在配置中更改此设置并添加新角色.
如果您使用的是专用Role类,则此答案不适用.
我最终hasRole在我的User班级中创建了一个新方法:
public function hasRole($role)
{
return in_array($role, $this->getRoles());
}
Run Code Online (Sandbox Code Playgroud)
然后,在模板中,我使用:
{% if app.user.hasRole('ROLE_VIEW_GEOLOC_DATA') %}
{# do something #}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
编辑:
正如@JonnyS所说,角色可能必须从ROLE_使用is_grantedSymfony的功能开始.没试过.
| 归档时间: |
|
| 查看次数: |
8892 次 |
| 最近记录: |