Views verwendet SQL, um die anzuzeigenden Knoten zu bestimmen. Leider wäre es aus Performance-Gründen für Drupal einfach nicht machbar, eine node_load für alle potenziellen Kandidaten durchzuführen und dann hook_node_access für jeden dieser Kandidaten aufzurufen. Stellen Sie sich eine Ansicht vor, die Tausende von Knoten zeigt (insbesondere bei Verwendung eines Pagers). Wenn die Logik nicht in SQL ausgeführt wird, weisen die Pager eine sehr ungewöhnliche Funktionalität auf. Drupal erzwingt daher, dass Sie dies tun, wie von rik erwähnt, indem Sie Zugriffsdatensätze in Ihrer Datenbank verwenden.
Das Erstellen von access_records ist einiges aufwändiger, wird aber mit SQL funktionieren. Daher empfehle ich, ein vorhandenes node_access-Modul zu verwenden, um Ihre Funktionalität nach Möglichkeit zu lösen, da es wahrscheinlich mithilfe von Zugriffsdatensätzen implementiert wird und daher mit Ansichten funktioniert.
Übrigens werden die Zugriffsdatensätze in der Tabelle node_access gespeichert (siehe unten):
Durch die Kommentare für jede Spalte erhalten Sie einen Überblick über deren Zweck. Stellen Sie sich den Bereich als das System vor, das für den Knotenzugriff verwendet wird, und die GID als die Gruppe innerhalb eines Bereichs. Diese Gruppe kann über Berechtigungen zum Anzeigen, Aktualisieren und Löschen verfügen. Im Allgemeinen definiert jedes node_access-Modul einen oder mehrere Bereiche (manchmal können auch mehrere node_access-Module parallel arbeiten). Ein Benutzer hat in jedem Bereich ein oder mehrere Gids.
In Drupal werden allen Abfragen mit dem Tag "node_access" automatisch spezielle Logikfunktionen hinzugefügt. Weitere Informationen zum Taggen finden Sie in der Dokumentation . Diese spezielle Logik verknüpft die Tabelle "node_access" für jeden Bereich und fügt die Bedingung hinzu, dass der Benutzer über die entsprechende Berechtigung verfügt, wenn "gid" einer der auf einen Benutzer angewendeten Gids entspricht.
Dieses gesamte System ermöglicht es allen Abfragen, node_access ordnungsgemäß zu verarbeiten, sogar Abfragen zu zählen usw. Es ist sehr leistungsfähig, weist jedoch eine höhere Lernkurve auf als nur hook_node_access. Wenn immer möglich, können Sie durch die Verwendung eines vorhandenen node_access-Moduls diesen ganzen Kopfschmerz sparen.
hook_node_access()
es festgelegt wurde , nicht wirklich einhält, sollten Sie nur Folgendes tun: den Code des Moduls "Ansichten" ändern.