web-dev-qa-db-ja.com

ログインしていないユーザーのロールを取得TWIG Symfony2

小枝の現在のユーザーではないときにユーザーが許可されているかどうかを知る方法を知りたいのですが。

私は現在のユーザーにこのコードを使用します:

{% if is_granted('ROLE_USER') %}
    <a href="...">Delete</a>
{% endif %}

ただし、現時点でログインしていない他のユーザーでも同じことができるようにしたいと思います。ありがとうございました。

編集:実際、認証されていないユーザーの役割をテストするためのtwig)を使用した直接的な方法はないと思います。したがって、=で直接実行しました。 twigテンプレート、ユーザーが管理者であるかどうかをテストしてから、変数を設定します(私の質問では、ユーザーのリストで実行方法を検索していました)。

{% 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 %}
15
Rmannn

UserエンティティにisGranted関数を実装すると、はるかに簡単になると思います。

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

これで、アプリケーションのすべてのレイヤーで付与されたロールを簡単に確認できます。 PHPの場合:

$user->isGranted("USER_ADMIN")

またはTwigで:

user.granted("USER_ADMIN")

現在のユーザーの役割を確認する必要がある場合は、Twigでこれを行うことができます。

app.user.granted("USER_ADMIN")

注:変数「app」はグローバルに定義されています。

注2:app.userはNULLになるため、このコードをアプリの保護された領域の外で使用すると、例外がスローされる場合があります。

16
Webberig

上記と同様のステートメントを「not」で使用できます。

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

またはelseステートメントを使用します。

{% if is_granted('ROLE_USER') %}
    <a href="...">Delete</a>
{% else %}
    {# something else for guest user, not logged in #}
{% endif %}
9
Krzysztof Lenda

twig macro 、またはtwig関数のいずれかを作成する必要があります。

macro の作成は、コードを使用して非常に簡単です。

_{% macro admin_status(from_user) %}
  {% 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 %}
{% endmacro %}
_

その後、{% _self.admin_status(user) %}と同じファイルで使用できます。別のファイルに移動し、小枝の import タグを使用してアクセスすることもできます。

twig関数を作成する方が良いオプションです。詳細については、 twigの拡張 を参照してください。つまり、twigから呼び出すことができる通常の関数を作成するので、次のようなコードを作成します。これが可能になります:

_{% if user_is_admin(user) %}
_

また、 カスタムtwig拡張機能を有効にする を有効にする)も読む必要があります。

4
Maerlyn

私はこのようにしました。このスニペットをグローバルtwigファイル、私の場合はlayout.html.twigに入れてください。

{% set is_admin = false %}
{% if app.security.token.user.roles is iterable %}
    {% for role in app.security.token.user.roles %}
        {% if role == 'ROLE_ADMIN' or role == 'ROLE_SUPER_ADMIN'  %}
            {% set is_admin = true %}
        {% endif %}
    {% endfor %}
{% endif %}

その後、どこでも使用できます

{% if is_admin %}....{% endif %}
0
Steffen Kamper