web-dev-qa-db-fra.com

Comment afficher / masquer un lien basé sur une autorisation?

Je cherche un moyen de cacher/afficher un lien depuis le menu principal si l'utilisateur actuel a une autorisation spécifique. L'élément de menu a déjà été créé et l'élément de menu est lié à un nœud contrôlé par hook_node_access ().

7
Camsoft

Par défaut, Drupal masquera tous les éléments de menu auxquels l'utilisateur n'a pas accès, donc la chose la plus simple à faire, c'est d'exiger l'accès sélectionné pour la page que l'élément de menu relie à.

4
googletorp

Ce que vous pouvez faire est de modifier le rappel d'accès associé à "node /% node" à l'aide de hook_menu_alter () , puis d'écrire le code de votre rappel d'accès en vous basant sur le code de node_access ( ) . Il y a des cas spécifiques que vous souhaitez toujours gérer comme le fait node_access(); par exemple, les utilisateurs disposant de l'autorisation "contourner l'accès au nœud" accèdent toujours au nœud.

function mymodule_menu_alter(&$items) {
  if (isset($items['node/%node'])) {
    $items['node/%node']['access callback'] = 'mymodule_node_access';
  }
}

Considérez que le rappel d'accès décide qui peut voir un lien et qui peut accéder à une page lorsque l'utilisateur écrit l'URL directement dans la barre d'adresse du navigateur.

2
kiamlaluno

Vous voudrez peut-être considérer drupal menu_item_visibility

Pour citer la page du projet:

Par exemple, si vous souhaitez créer un lien 'Mon compte' qui pointe vers/utilisateur, les utilisateurs anonymes et enregistrés ont accès au chemin/utilisateur, donc les deux verront le lien, même si les utilisateurs anonymes n'ont pas techniquement de compte . L'utilisation de ce module vous permettra de ne voir votre lien "Mon compte" que pour les utilisateurs enregistrés et de le cacher aux utilisateurs anonymes.

Le module utilise exactement la même interface utilisateur que celle utilisée pour les paramètres de visibilité des blocs par souci de familiarité.

Ou le module menu_views - qui fournit une approche basée sur les vues pour la génération de menus (qui, je pense, inclut en fonction de l'utilisateur)

1
therobyouknow