树枝中 is_granted 的 Symfony 2 FOSUSER 问题
Symfony 2 FOSUSER issue with is_granted in twig
我在 twig 中遇到 is_granted('') 函数的问题。
我当前的用户具有以下角色:['ROLE_USER','ROLE_FOOBAR']
,从 symfony 分析器检查。
使用此代码:打印管理员 link (KO):
{% if is_granted('ROLE_BACKOFFICE') or is_granted('ROLE_SYSTEM') %}
<li>
<a href="{{ path('sonata_admin_dashboard') }}">
ADMIN
</a>
</li>
{% endif %}
使用此代码:不打印管理员 link(确定):
{% if app.user.hasRole('ROLE_BACKOFFICE') or app.user.hasRole('ROLE_SYSTEM') %}
<li>
<a href="{{ path('sonata_admin_dashboard') }}">
ADMIN
</a>
</li>
{% endif %}
我不明白为什么 link 印有 is_granted ?
我的角色层次结构似乎没问题,那段代码有什么问题?
如果您查看 vendor/friendsofsymfony/user-bundle/Model/User.php,它说明 hasRole 不得在此上下文中使用:
/**
* Never use this to check if this user has access to anything!
*
* Use the SecurityContext, or an implementation of AccessDecisionManager
* instead, e.g.
*
* $securityContext->isGranted('ROLE_USER');
*
* @param string $role
*
* @return boolean
*/
public function hasRole($role)
{
return in_array(strtoupper($role), $this->getRoles(), true);
}
这是 security.yml 中我的角色层次结构的片段:
role_hierarchy:
ROLE_FOOBAR: ROLE_USER
...
ROLE_ADMIN: [ROLE_USER, ROLE_MANAGER]
我终于找到问题了:
问题来自选民内部的错误。我更改了这个片段:
if ($object != null && !$this->supportsClass(get_class($object))) {
return self::ACCESS_ABSTAIN;
}
至:
if (!$this->supportsClass(get_class($object))) {
return self::ACCESS_ABSTAIN;
}
现在,一切都好起来了。刚刚失去了我的一天!希望对您有所帮助。
我在 twig 中遇到 is_granted('') 函数的问题。
我当前的用户具有以下角色:['ROLE_USER','ROLE_FOOBAR']
,从 symfony 分析器检查。
使用此代码:打印管理员 link (KO):
{% if is_granted('ROLE_BACKOFFICE') or is_granted('ROLE_SYSTEM') %}
<li>
<a href="{{ path('sonata_admin_dashboard') }}">
ADMIN
</a>
</li>
{% endif %}
使用此代码:不打印管理员 link(确定):
{% if app.user.hasRole('ROLE_BACKOFFICE') or app.user.hasRole('ROLE_SYSTEM') %}
<li>
<a href="{{ path('sonata_admin_dashboard') }}">
ADMIN
</a>
</li>
{% endif %}
我不明白为什么 link 印有 is_granted ? 我的角色层次结构似乎没问题,那段代码有什么问题?
如果您查看 vendor/friendsofsymfony/user-bundle/Model/User.php,它说明 hasRole 不得在此上下文中使用:
/**
* Never use this to check if this user has access to anything!
*
* Use the SecurityContext, or an implementation of AccessDecisionManager
* instead, e.g.
*
* $securityContext->isGranted('ROLE_USER');
*
* @param string $role
*
* @return boolean
*/
public function hasRole($role)
{
return in_array(strtoupper($role), $this->getRoles(), true);
}
这是 security.yml 中我的角色层次结构的片段:
role_hierarchy:
ROLE_FOOBAR: ROLE_USER
...
ROLE_ADMIN: [ROLE_USER, ROLE_MANAGER]
我终于找到问题了: 问题来自选民内部的错误。我更改了这个片段:
if ($object != null && !$this->supportsClass(get_class($object))) {
return self::ACCESS_ABSTAIN;
}
至:
if (!$this->supportsClass(get_class($object))) {
return self::ACCESS_ABSTAIN;
}
现在,一切都好起来了。刚刚失去了我的一天!希望对您有所帮助。