Existe-t-il un moyen d'éviter qu'un utilisateur anonyme puisse voir un nœud d'un type de contenu spécifique?

9

Existe-t-il un moyen d'éviter que les utilisateurs anonymes puissent voir les nœuds d'un type de contenu, comme un bloc ou une vue?

Je peux contrôler l'accès avec une vue, mais si je connais le lien pour un nœud, je peux le voir sans d'abord me connecter.

Frank Giesecke
la source

Réponses:

10

Vous pouvez contrôler l'accès aux nœuds dans le hook hook_node_access ():

mymodule.module:

use Drupal\node\NodeInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Access\AccessResult;

function mymodule_node_access(NodeInterface $node, $op, AccountInterface $account) {
  if ($account->isAnonymous() && $node->gettype() == 'article') {
    return AccessResult::forbidden()->cachePerPermissions();
  }
  return AccessResult::neutral()->cachePerPermissions();
}

Cela contrôle l'accès direct au nœud, pas l'accès aux vues. Mais c'est ce que vous voulez probablement.

4k4
la source
Je crois que pour contrôler l'accès en vue également, vous utiliseriez hook_node_grants.
Jonathan
4

Votre meilleur pari est d'utiliser Rabbit Hole ou Content Access lorsqu'il a une version mise à jour.

Trou de lapin

Rabbit Hole est un module qui ajoute la possibilité de contrôler ce qui doit se produire lorsqu'une entité est consultée sur sa propre page. Vous avez peut-être un type de contenu qui ne devrait jamais être affiché sur sa propre page, comme un type de contenu d'image affiché dans un carrousel. Rabbit Hole peut empêcher ce nœud d'être accessible sur sa propre page, via node / xxx.

Accès au contenu

Ce module vous permet de gérer les autorisations pour les types de contenu par rôle et auteur. Il vous permet de spécifier des autorisations d'affichage, de modification et de suppression personnalisées pour chaque type de contenu. En option, vous pouvez activer les paramètres d'accès par contenu, afin de personnaliser l'accès pour chaque nœud de contenu.

Notez que ce que je crois que vous voulez, c'est bloquer tout accès à un nœud d'un type de contenu - et seul l'accès au contenu remplira cela sur Rabbit Hole.

Au-delà de cela, je pense que vous envisagez d'implémenter votre propre contrôle d'accès si aucun de ces éléments ne vous convient.

Kevin
la source
Désolé de questionner votre réponse Kevin, mais connaissez-vous le module Groupe ? Jetez un oeil au tutoriel vidéo pour comprendre ce que je veux dire ... BTW: pour D7, j'ai également l'habitude de recommander "Content Access".
Pierre.Vriens
2
Pas depuis OG. Un peu lourd à installer sauf s'il y a un besoin dans ce sens?
Kevin
" ... puisque c'était OG "? Que veux-tu dire par là? Et à propos de "lourd": est-ce que vous êtes OG (si oui, je suis d'accord) ou Groupe (si oui, je suis en désaccord)?
Pierre.Vriens
J'ai toujours pensé que le groupe était une fourchette d'OG pour D8
Kevin
Désolé (encore) Kevin, ce n'est pas le cas ... en savoir plus .
Pierre.Vriens
1

Vous souhaitez peut-être essayer d'utiliser le module Groupe , qui permet de créer des collections arbitraires de votre contenu et des utilisateurs sur votre site, et d'accorder des autorisations de contrôle d'accès sur ces collections. Il est disponible à partir de D7 et possède également une version D8. Il crée des groupes en tant qu'entités, les rendant entièrement modifiables, extensibles et exportables. Chaque groupe peut avoir des utilisateurs, des rôles et des autorisations qui lui sont attachés (voir " Quels sont les différents rôles pris en charge par le module Groupe? " Pour plus de détails à ce sujet).

Pour cette question spécifique, vous devez activer le gnodesous - module et pour chaque type de groupe, vous devez définir les autorisations appropriées (afficher, modifier, supprimer, etc.) pour les différents types de contenu.

Il semble que vous souhaitiez autoriser l'accès à ce qui, dans le groupe, est appelé "membres" et "étrangers" (= utilisateurs connectés qui ne sont pas membres d'un groupe). Mais vous ne permettriez pas l'accès à "Anonymous" (visiteurs du site qui ne sont pas connectés).

Ressources

Pierre.Vriens
la source
1

Vous pouvez utiliser le module Node View Permissions .

Activez-le et vous pouvez ensuite attribuer les rôles qui peuvent voir quels types de contenu sous le chemin «admin / people / permissions» sous la section «Autorisations de visualisation des nœuds»


la source