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

12

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?

Fahad Ur Rehman
la source

Réponses:

12

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.

googletorp
la source
1
Trop simple? Il n'existe pas de «solution trop simple». La complexité n'est pas un objectif en soi, n'est-ce pas? Peut-être que la réponse de Googletorp ne résout pas votre problème spécifique, mais dans ce cas, vous devrez être plus élaboré et expliquer pourquoi.
marcvangend
@marcvangend Bien qu'il soit tard mais je me rends compte que ce n'est pas la réponse à ma question. J'espère que quelqu'un pourra ajouter une meilleure réponse
Fahad Ur Rehman
@Fahad Pour obtenir de meilleures réponses, vous devez poser de meilleures questions. La réponse de Googletorp me semble être une bonne solution, et les votes positifs semblent d'accord. Si cela ne résout pas votre problème, entrez et modifiez votre question, en ajoutant tous les détails pertinents.
marcvangend
@marcvangend en fait mon problème a été résolu et j'ai accepté la réponse plus tôt mais à la lumière de votre commentaire. Googletorps a une très bonne réputation, ne fait aucune différence si j'accepte ou n'accepte pas sa réponse. Il a fourni une excellente solution alternative pour laquelle j'ai également voté pour lui.
Fahad Ur Rehman
@Fahad En acceptant une réponse que vous dites: cette réponse a résolu mon problème. C'est une déclaration puissante et très utile pour les visiteurs à venir, pour savoir si une réponse est utile ou non. Si ma réponse n'a pas résolu votre problème, vous devez modifier votre question et publier des détails sur les raisons pour lesquelles ma solution ne fonctionne pas pour vous et, comme l'a dit marcvangend, ajoutez plus de détails.
googletorp
3

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 l'affichage des pages de nœuds semble être un meilleur moyen de restreindre l'accès direct à tous les nœuds de 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.

Fahad Ur Rehman
la source
1

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 l'affichage des pages de noeuds" pour maintenir la fusion des projets dans les problèmes.

Avantages par rapport à "Restreindre l'affichage des pages de nœuds":

  • 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 à "Restreindre l'affichage des pages de nœuds":

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

vous devez utiliser node_access(), il existe certaines options que vous pouvez facilement implémenter en utilisant hook_node_access(). L'implémentation 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 ()

gauravjeet
la source
0

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

/**
 * 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;
}
leymannx
la source
Ce module a déjà été mentionné il y a quelques années. Pourriez-vous expliquer ce que votre réponse apporte de nouveau au sujet?
Mołot
@ Mołot - ... pour écrire un module vous-même. Réponse modifiée.
leymannx
0

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" qu'aux rôles sélectionnés (par exemple pour que les administrateurs puissent toujours utiliser ces chemins pour afficher un nœud). Mais pour tous ceux qui connaissent 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é).

Pierre.Vriens
la source