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

10

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 faire cela dans Drupal 7?

Ek Kosmos
la source
1
Voulez-vous dire comment vous pouvez le faire en utilisant un module, ou comment vous pouvez le faire en écrivant le code nécessaire?
kiamlaluno
Une autre façon consiste à refuser le nœud en utilisant et à étendre le profil utilisateur par champs.
ya.teck
Il semble que ce nœud par utilisateur puisse répondre à une sorte d'exigence de profil utilisateur. Doit-il s'agir d'un nœud distinct, ou ne serait-il pas préférable d'étendre l'entité utilisateur elle-même avec des champs supplémentaires?
Alfred Armstrong
Drupal 7 a supprimé les autorisations d'affichage des nœuds par utilisateur. Vous pouvez les ramener avec ce module drupal.org/project/node_view_permissions
giorgio79
utiliser le lien "nodeaccess" du module est drupal.org/project/nodeaccess je souhaite que cela vous aide
Mahipal Purohit

Réponses:

11

À l'aide d'un module existant, vous pouvez le faire avec Content Access , qui (lorsqu'il est utilisé ensemble ACL ) permet de définir les autorisations d'accès à 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 et que vous souhaitez vous assurer 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.

kiamlaluno
la source
5

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

Petr Svehla
la source
1

Ce dont vous parlez, c'est du contrôle d'accès aux nœuds Drupal, 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 une 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 vous permettre de contrôler 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.

Radical gratuit
la source