【发布时间】:2020-03-29 05:13:25
【问题描述】:
我在 Twig 中检查权限时遇到问题。
用户可以有多个角色,它们以字符串数组的形式存储在数据库中。某些角色无权访问个人资料视图。
当我创建一个角色允许查看配置文件但另一个角色不允许查看配置文件的用户时 - is_granted() 似乎只检查数组中的第一个角色并返回 false,即使第二个角色确实允许访问。
在模板中它看起来像这样:
{% if is_granted('ROLE_backend_USER_Profile') %}
<li>
<a href="{{ path('admin_profile') }}">Profile</a>
</li>
{% endif %}
角色层次结构如下所示:
ROLE_BACKEND_ADMIN:
- ROLE_BACKEND_USER
- ROLE_backend_USER_Profile
- ROLE_backend_Post_addPost
... etc. ...
ROLE_BACKEND_OTHERTYPEOF_ADMIN:
- ROLE_backend_Home_index
- ROLE_backend_typeof_list
- ROLE_backend_typeof_edit
... etc. ...
如果我的用户同时具有这两个角色 - is_granted('ROLE_backend_USER_Profile') 返回 false,即使拥有其他角色应该允许他访问。
【问题讨论】:
-
symfony 中的角色可能很棘手,实际上非常棘手。使用分析器查看 security token 具有哪些角色,这些角色可能与您可能期望的用户角色非常不匹配。注销并重新登录可能会很好地改变安全令牌的角色。 (这有时与模拟用户相关且实用,它为安全令牌(而不是用户)提供了一个角色,该角色与框架通信,它是一个模拟和东西)。所以请检查分析器以查看安全令牌具有哪些角色(这是
is_granted('ROLE_...')唯一相关的东西) -
我会试试这个并报告。