web-dev-qa-db-fra.com

Comment un utilisateur peut-il accéder à un seul nœud spécifique et pas à tous les nœuds de ce type?

J'ai un utilisateur avec des droits de visualisation et de modification sur un type de contenu spécifique. Cela donne le privilège à tous les utilisateurs d'afficher et de modifier tous les nœuds de ce type. Mais en fait, je veux créer pour chaque utilisateur un nœud unique, afin que seul cet utilisateur puisse le voir et le modifier. Comment puis-je le faire dans Drupal 7?

10
Ek Kosmos

En utilisant un module existant, vous pouvez le faire avec Content Access , qui (lorsqu'il est utilisé ensemble ACL ) permet de définir les autorisations sur accéder à un nœud pour chaque utilisateur.
Cela signifie que vous devez définir manuellement les autorisations d'accès pour chaque nœud.

Si vous créez manuellement les nœuds, puis que vous voulez être sûr que seul l'utilisateur défini comme propriétaire du nœud est en mesure de le voir (et de le modifier), vous pouvez créer un module personnalisé (ce qui signifie un module qui est utilisé pour votre site), et implémentez hook_node_access() comme suit (le code a été écrit pour en faciliter la lecture):

function mymodule_node_access($node, $op, $account) {
  // We are interested to existing objects. When the node is being created, Drupal passed the node type instead of the node object. 
  if (is_object($node)) {
    $bool = (
      ($node->type == 'the node type you need to check') && 
      (($op == 'view') || ($op == 'update'))
    );
    if ($bool) {
      if ($account->uid == $node->uid) {
        return NODE_ACCESS_ALLOW;
      }
      else {
        return NODE_ACCESS_DENY;
      }
    }
  }

  return NODE_ACCESS_IGNORE;
}

À l'aide de cette implémentation de hook, vous n'avez pas besoin de modifier manuellement les autorisations d'accès accordées pour chaque nœud de ce type de contenu que vous créez. Changer le propriétaire du nœud serait également plus facile, car vous n'avez pas besoin de modifier les autorisations d'accès de ce nœud; le code accorderait automatiquement les autorisations de mise à jour et d'affichage à l'utilisateur défini comme propriétaire (ou auteur) du nœud.

11
kiamlaluno

Vous n'avez besoin d'aucun module spécial ou code personnalisé pour ce faire. Il suffit de créer manuellement ces nœuds, de définir les utilisateurs appropriés en tant que propriétaire (auteur) des nœuds et de définir les autorisations sur ce type de contenu pour modifier uniquement son propre contenu (ne modifier aucun contenu de ce type) et vous avez terminé.

5
Petr Svehla

Ce dont vous parlez est Drupal contrôle d'accès au nœud, qui est un sujet énorme.

La prise en charge intégrée du noyau pour le contrôle d'accès aux nœuds est plutôt évidente, et pour contrôler l'accès pour afficher un nœud par rôle, vous devez utiliser une sorte de module de contrôle d'accès aux nœuds. Il y a page sur Drupal.org listant tous les modules d'accès aux nœuds , avec une revue de capsule de chacun. Je vous suggère de jeter un œil à cette page pour voir si vous pouvez trouver un module approprié pour contrôler l'accès.

Le module Flexi Access semble être le module qui correspond le mieux à vos besoins, car sa fonction principale est de laisser vous contrôlez l'accès pour les utilisateurs individuels, plutôt que par rôle ou par terme de taxonomie.

Il s'agit d'un petit module qui vous permet de configurer des ACL (listes de contrôle d'accès) pour des utilisateurs individuels. Il s'agit essentiellement d'une interface utilisateur pour le module ACL , vous devez donc également l'installer.

Il manque certaines des fonctionnalités des modules de contrôle d'accès les plus avancés, tels que Content Access , mais il est activement maintenu et il n'y a actuellement aucun bogue ouvert dans sa file d'attente de problèmes.

Divulgation: je suis le responsable de Flexi Access.

1
Free Radical