Gibt es eine Möglichkeit zu vermeiden, dass anonyme Benutzer einen Knoten eines bestimmten Inhaltstyps sehen können?

9

Gibt es eine Möglichkeit zu vermeiden, dass anonyme Benutzer Knoten eines Inhaltstyps wie einen Block oder eine Ansicht sehen können?

Ich kann den Zugriff mit einer Ansicht steuern, aber wenn ich den Link für einen Knoten kenne, kann ich ihn sehen, ohne mich vorher anzumelden.

Frank Giesecke
quelle

Antworten:

10

Sie können den Zugriff auf Knoten im Hook hook_node_access () steuern :

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();
}

Dies steuert den direkten Zugriff auf den Knoten, nicht den Zugriff in Ansichten. Aber das ist es, was Sie wahrscheinlich wollen.

4k4
quelle
Ich glaube, dass Sie hook_node_grants verwenden würden, um den Zugriff auch in der Ansicht zu steuern.
Jonathan
4

Am besten verwenden Sie Rabbit Hole oder Content Access, wenn die Version aktualisiert ist.

Kaninchenbau

Rabbit Hole ist ein Modul, mit dem Sie steuern können, was passieren soll, wenn eine Entität auf einer eigenen Seite angezeigt wird. Möglicherweise haben Sie einen Inhaltstyp, der niemals auf einer eigenen Seite angezeigt werden sollte, z. B. einen Bildinhaltstyp, der in einem Karussell angezeigt wird. Rabbit Hole kann verhindern, dass auf diesen Knoten über node / xxx auf einer eigenen Seite zugegriffen werden kann.

Zugriff auf Inhalte

Mit diesem Modul können Sie Berechtigungen für Inhaltstypen nach Rolle und Autor verwalten. Hier können Sie benutzerdefinierte Ansichts-, Bearbeitungs- und Löschberechtigungen für jeden Inhaltstyp festlegen. Optional können Sie die Einstellungen für den Inhaltszugriff aktivieren, sodass Sie den Zugriff für jeden Inhaltsknoten anpassen können.

Beachten Sie, dass Sie meiner Meinung nach den gesamten Zugriff auf einen Knoten eines Inhaltstyps blockieren möchten - und nur der Inhaltszugriff wird dies über Rabbit Hole erfüllen.

Darüber hinaus denke ich, dass Sie versuchen würden, Ihre eigene Zugangskontrolle zu implementieren, wenn keiner dieser Punkte zutrifft.

Kevin
quelle
Es tut mir leid, Ihre Antwort zu hinterfragen, Kevin, aber kennen Sie das Gruppenmodul ? Schauen Sie sich das Video-Tutorial an, um zu verstehen, was ich meine ... Übrigens: Für D7 habe ich auch "Content Access" empfohlen.
Pierre.Vriens
2
Nicht seit es OG war. Etwas schwer zu installieren, es sei denn, es besteht ein Bedarf in diesem Sinne?
Kevin
" ... seit es OG war "? Was meinst du damit? Und über "schwer": Sind Sie OG (wenn ja, stimme ich zu) oder Gruppe (wenn ja, stimme ich nicht zu)?
Pierre.Vriens
Ich dachte immer nur, dass Group eine Gabelung von OG für D8 ist
Kevin
Entschuldigung (wieder) Kevin, das ist nicht der Fall ... lesen Sie mehr .
Pierre.Vriens
1

Vielleicht möchten Sie versuchen, das Gruppenmodul zu verwenden , mit dem Sie beliebige Sammlungen Ihrer Inhalte und Benutzer auf Ihrer Site erstellen und Zugriffssteuerungsberechtigungen für diese Sammlungen erteilen können. Es ist ab D7 erhältlich und hat auch eine D8-Version. Es werden Gruppen als Entitäten erstellt, sodass sie vollständig feldfähig, erweiterbar und exportierbar sind. Jeder Gruppe können Benutzer, Rollen und Berechtigungen zugeordnet sein ( weitere Informationen hierzu finden Sie unter " Welche verschiedenen Rollen werden vom Gruppenmodul unterstützt? ").

Für diese spezielle Frage würden Sie das gnodeSubmodul aktivieren und für jeden Gruppentyp die entsprechenden Berechtigungen (Anzeigen, Bearbeiten, Löschen usw.) für die verschiedenen Inhaltstypen definieren.

Es scheint, dass Sie Zugriff auf das gewähren möchten, was in der Gruppe als "Mitglieder" und "Außenseiter" bezeichnet wird (= angemeldete Benutzer, die kein Mitglied einer Gruppe sind). Sie erlauben jedoch keinen Zugriff auf "Anonym" (Website-Besucher, die nicht angemeldet sind).

Ressourcen

Pierre.Vriens
quelle
1

Sie können das Modul " Knotenansichtsberechtigungen" verwenden .

Aktivieren Sie es und legen Sie fest, welche Rollen welche Inhaltstypen unter dem Pfad 'admin / people / permissions' im Abschnitt 'Node view permissions' anzeigen können.


quelle