web-dev-qa-db-ja.com

テンプレートファイルのコンテンツをユーザーロールに制限する

Drupal 8.で匿名ノードに単一ノードを制限したいのですが、私のように単一制限では役に立たないため、そのためのモジュールを使用したくありません。

私はこのようなことでそれを行うことができることを知っています。

{% if user.hasPermission('myPermission') %}
     //my template HTML
{% else %}
    //some login for the customer
{% endif %} 

許可によってコンテンツを制限したくありません。代わりに、次のようなもので制限したいと思います。

{% if user.hasRole('authenticated') %}

これはテーマフックで可能ですか、それともモジュールを使用する必要がありますか?

8
Gabbax0r

twigユーザーが認証されている場合は、デフォルトの変数_logged_in_を使用してチェックインできます。

_{% if logged_in %}
  <p>The user is authenticated".</p>
{% endif %}
_

これは、ユーザーモジュールがすべてのテンプレートの前処理で変数を提供するため機能します。

_/**
 * Implements hook_template_preprocess_default_variables_alter().
 *
 * @see user_user_login()
 * @see user_user_logout()
 */
function user_template_preprocess_default_variables_alter(&$variables) {
  $user = \Drupal::currentUser();

  $variables['user'] = clone $user;
  // Remove password and session IDs, since themes should not need nor see them.
  unset($variables['user']->pass, $variables['user']->sid, $variables['user']->ssid);

  $variables['is_admin'] = $user->hasPermission('access administration pages');
  $variables['logged_in'] = $user->isAuthenticated();
}
_

一般的な役割

一般的なロールを確認する場合は、hasRole()を使用できません。このメソッドはアカウントでは使用できないためです。 getRoles()を使用して、返された配列にロールが含まれているかどうかを確認する必要があります。

_{% if 'example_role' in user.getroles  %}
  <p>The user has the role "example_role".</p>
{% endif %}
_
18
4k4