[resolu] Thème: Connaître les droits de l'utilisateur sur le node

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Ca doit vraiment être une question basique... mais franchement j'ai cherché et j'ai 100000 résultat mais rien de ce que je veux.

C'est simple, j'aimerai savoir si l'utilisateur à le droit d'édition sur un node. Il faudrait que j'ai cette information dans le thème (fichier node.tpl.php). Ca me permettrait de désactiver le lien sur le titre du node si l'utilisateur ne peut pas l'éditer.

Dans l'idée:

<?php if ($page == 0) { ?>
  <h2 class="title">
    <?php if(nodeUseRight($node->uid,'edit')){?>
<a href="<?php print $node_url?>"><?php print $title?></a>
            <?php }else{ ?>
<?php print $title?>
    <?php };?>
   </h2>
<?php }; ?>

Merci pour votre aide.

Version de Drupal : 

Salut,

La réponse dépend des permissions implémentées sur ton site et du type de noeud. Admettons qu'il s'agisse d'un noeud de type story et que l'utilisateur ne puisse voir le lien que s'il possède l'une des 2 permissions suivantes :
* edit story content
* edit own story content

Dans ce cas, le test est :

<?php
 
if (user_access('edit story content') || user_access('edit own story content')) {
 
// affiche le lien
}
?>

user_access() renvoie TRUE ou FALSE selon que le user en cours possède la permission passée en paramètre, ou pas. Tu peux utiliser n'importe laquelle des permissions (en anglais) définies dans Admin > Gestion des utilisateurs > Contrôle d'accès.

Merci
Mais il n'est pas possible de partir du node et pas des permissions "global" de l'utilisateur? Genre j'envoie en paramètre à une hypothétique fonction l'utilisateur + le nodeid + la permission cible (edit, view) et la fonction nous renvois un boolean.

Ca permettrait de faire un code plus générique.

Ou alors ça ce fait aussi avec user_access() et j'en ai pas compris toute la subtilité....

Non non, tu as bien compris.

Vu ton besoin, il faut plutôt que tu regardes du côté de la fonction node_access($op, $node), qui renvoie TRUE si le user en cours a le droit d'effectuer une opération donnée sur un node donné.

Par exemple, écris :

<?php
if (node_access('update', $mon_node)) {
 
//
}
?>

pour savoir si le user en cours peut mettre à jour le noeud $mon_node.

1000 fois merci c'est exactement ça que dont j'ai besoin :)

EDIT: et après essais ça fonctionne nickel :)

Afficher le lien sur le titre du node uniquement si l'utilisateur à le droit d'upate sur ce node (fichier node.tpl.php):

<?php if ($page == 0) { ?>
<h2 class="title">
     <?php if(node_access('update', $node)){?>
          <a href="<?php print $node_url?>"><?php print $title?></a>
       <?php }else{ ?>
          <?php print $title?>
     <?php }; ?>
  </h2>
  <?php }; ?>