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?
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.
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.
Un autre module qui fait la même chose mais avec plus de fonctionnalités.
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":
Inconvénient par rapport à "Restrict Node Page View":
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.
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é).
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;
}