小枝の現在のユーザーではないときにユーザーが許可されているかどうかを知る方法を知りたいのですが。
私は現在のユーザーにこのコードを使用します:
{% 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 %}
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になるため、このコードをアプリの保護された領域の外で使用すると、例外がスローされる場合があります。
上記と同様のステートメントを「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 %}
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拡張機能を有効にする を有効にする)も読む必要があります。
私はこのようにしました。このスニペットをグローバル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 %}