web-dev-qa-db-fra.com

Restreindre le contenu à un rôle d'utilisateur dans un fichier de modèle

Je veux restreindre un seul nœud aux utilisateurs anonymes dans Drupal 8. Je ne veux pas utiliser de module pour cela car il est inutile pour une restriction unique selon moi.

Je sais que je peux le faire avec quelque chose comme ça.

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

Je ne veux pas restreindre le contenu via une autorisation, mais je veux le restreindre avec quelque chose comme

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

Est-ce possible avec un hook de thème ou dois-je utiliser un module?

8
Gabbax0r

Pour enregistrer twig si l'utilisateur est authentifié, vous pouvez utiliser la variable par défaut logged_in:

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

Cela fonctionne car le module utilisateur fournit la variable en prétraitement pour tous les modèles:

/**
 * 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();
}

Rôles génériques

Si vous souhaitez vérifier un rôle générique, vous ne pouvez pas utiliser hasRole(), car cette méthode n'est pas disponible pour les comptes. Vous devez utiliser getRoles() et vérifier si le rôle est dans le tableau retourné:

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