web-dev-qa-db-fra.com

Comment restreindre l'accès direct aux nœuds?

Comment restreindre l'accès direct aux nœuds mais simplement autoriser les vues à accéder au champ requis du type de nœud particulier?

Par exemple, dans le diaporama de vues, nous glissons le champ d'image qui appartient à un type de nœud particulier. Mais nous ne voulons pas que les moteurs de recherche accèdent et que les visiteurs accèdent aux nœuds appartiennent à ce type de nœud.

Aucune suggestion?

12
Fahad Ur Rehman

Si nous dépublions les nœuds ajoutés par user1, ils ne seront pas modifiables par tout autre utilisateur même si l'utilisateur a le droit de modifier le contenu de ce type de contenu.

Restreindre Node Page View semble une meilleure façon de restreindre l'accès direct à tous les nœuds d'un type de contenu spécifique.

L'utilisation est également assez simple, il vous suffit d'activer ce module et de configurer les autorisations pour les nœuds qui sont directement accessibles comme d'habitude.

http://drupal.org/project/restrict_node_page_view

Depuis la page du projet:

Avez-vous déjà utilisé un nodetype de diaporama que vous devez publier, mais vous ne voulez pas que le nœud soit accessible par lui-même en utilisant le chemin node/XXX? Ce module est fait pour vous!

Avec ce module, vous pouvez désactiver l'accès direct aux pages de nœuds (nœud/XXX) en fonction des types de nœuds et des autorisations.

Activez le module et n'oubliez pas de configurer vos autorisations.

3
Fahad Ur Rehman

Une solution simple serait de ne pas publier les nœuds auxquels vous ne souhaitez pas être accessible. Les vues peuvent toujours extraire les données de ces nœuds.

12
googletorp

Un autre module qui fait la même chose mais avec plus de fonctionnalités.

Trou de lapin

Les responsables de ce projet demandent à "Restreindre Node Vue de page" Le responsable pour fusionner les projets dans les problèmes.

Avantages par rapport à "Restrict Node Page View":

  • Même fonctionnalité principale sur le nœud mais extensible aux utilisateurs/fichiers/termes de taxonomie
  • Peut être utilisé dans votre module
  • Peut être global par type de contenu ou sur chaque contenu
  • Voir plus sur la page du projet ...

Inconvénient par rapport à "Restrict Node Page View":

  • Plus de code donc peut-être moins efficace (besoin de tests, non prouvé)
1
Payou

vous devez utiliser node_access(), il existe certaines options que vous pouvez facilement implémenter en utilisant hook_node_access(). L'implémentation de node_access() vous permet de décider qui peut accéder à un nœud et qui peut créer, supprimer, modifier ou mettre à jour un tel nœud. Cependant, les vues peuvent toujours extraire des données de ces nœuds.

hook_node_access () , node_access ()

1
gauravjeet

En utilisant le module Rules vous pouvez implémenter une règle qui ressemble à ceci:

{ "rules_check_url" : {
    "LABEL" : "Disallow node/* access",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "text_matches" : {
          "text" : [ "site:current-page:url" ],
          "match" : "node\/\\d+$",
          "operation" : "regex"
        }
      }
    ],
    "DO" : [
      { "drupal_message" : {
          "message" : "Sorry, direct access to URLs like [site:current-page:url] is not allowed around here ...",
          "type" : "error"
        }
      },
      { "redirect" : { "url" : "no_access" } }
    ]
  }
}

La règle ci-dessus ne prend pas (encore) en compte pour n'appliquer l '"action" que pour les rôles sélectionnés (par exemple pour que les administrateurs puissent toujours utiliser ces chemins pour afficher un nœud). Mais pour quelqu'un qui connaît un peu le module Rules, c'est une "condition" simple à ajouter ...

Pour expérimenter cette règle dans votre propre site, copiez tout le code Rules ci-dessus et collez-le dans une nouvelle règle dans votre propre site, créée via la fonction "Importer". Ensuite, modifiez/affinez davantage pour l'adapter à votre propre environnement (par exemple, le message "Désolé, ..." sera affiché).

0
Pierre.Vriens

Inspiré par https://www.drupal.org/project/restrict_node_page_view vous pourriez écrire vous-même un petit module:

/**
 * Implements hook_node_access()
 */
function MYMODULE_node_access($node, $op, $account) {

  // Default checks
  if (!is_object($node)) {
    return NODE_ACCESS_IGNORE;
  }

  $type = is_string($node) ? $node : $node->type;

  if($op == 'view' && arg(0) == 'node' && arg(1) === $node->nid) {

    // Restrict access to full MYTYPE node for anon users
    if ($type == 'MYTYPE' && user_is_anonymous()) {
      return NODE_ACCESS_DENY;
    }
  }
  // Default
  return NODE_ACCESS_IGNORE;
}
0
leymannx