获取未登录TWIG Symfony2的用户的角色

Rma*_*nnn 15 symfony twig

我想知道如果用户不是当前用户的话,我是怎么知道的.

我将此代码用于当前用户:

{% if is_granted('ROLE_USER') %}
    <a href="...">Delete</a>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

但我希望能够与目前尚未登录的用户做同样的事情.谢谢.

编辑: 事实上,我认为没有直接的方法用twig来测试未经过身份验证的用户的角色.所以我直接在twig模板中做了,测试用户是否是admin,然后设置var.(在我的问题中,我正在搜索如何在用户列表中进行.)

{% set from_user_is_admin = false %}
{% for role in from_user.getRoles() %} 
    {% if role == 'ROLE_ADMIN' %}{% set from_user_admin = true %}{% endif %}
    {% if role == 'ROLE_SUPER_ADMIN' %}{% set from_user_admin = true %}{% endif %}
{% endfor %}
{% if from_user_admin == false %}THIS USER IS NOT ADMIN{% endif %}
Run Code Online (Sandbox Code Playgroud)

Web*_*rig 16

我认为如果你在User实体中实现了一个isGranted函数会容易得多:

Class User implements UserInterface {
    ...
    public function isGranted($role)
    {
        return in_array($role, $this->getRoles());
    }
}
Run Code Online (Sandbox Code Playgroud)

您现在可以轻松地在应用程序的每个层中检查授予的角色.在PHP中:

$user->isGranted("USER_ADMIN")
Run Code Online (Sandbox Code Playgroud)

或者在Twig中:

user.granted("USER_ADMIN")
Run Code Online (Sandbox Code Playgroud)

如果您需要检查当前用户的角色,可以在Twig中执行此操作:

app.user.granted("USER_ADMIN")
Run Code Online (Sandbox Code Playgroud)

注意:变量"app"是全局定义的.

注意2:如果您在应用程序的安全区域之外使用此代码,则此代码可能会抛出异常,因为app.user将为NULL.

  • 这可能不起作用,因为存在角色继承 (12认同)
  • 如果您想要处理角色继承而不仅仅是'严格'角色,请参阅http://stackoverflow.com/a/24323223/877323 (2认同)

Krz*_*nda 9

您可以使用与"not"类似的语句:

{% if not is_granted('ROLE_USER') %}
    <a href="...">Delete</a>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

或使用else声明:

{% if is_granted('ROLE_USER') %}
    <a href="...">Delete</a>
{% else %}
    {# something else for guest user, not logged in #}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

  • 是的我知道这个功能,但is_granted正在测试当前的用户.我想知道的是从不是当前用户的用户对象做同样的事情.我编辑我的问题以便按照我的方式进行.不管怎么说,还是要谢谢你. (3认同)