web-dev-qa-db-fra.com

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

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.

9
Frank Giesecke

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.

10
4k4

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.

4
Kevin

Vous pouvez utiliser le module Node View Permissions .

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

1
user11448

Vous pouvez peut-être essayer d'utiliser le module Group , 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 sous-module gnode, et pour chaque type de groupe, vous définirez 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

1
Pierre.Vriens