Widoki wykorzystują SQL do określania węzłów do wyświetlenia. Niestety, ze względu na wydajność, po prostu nie byłoby możliwe, aby Drupal wykonał obciążenie węzła na wszystkich potencjalnych kandydatach, a następnie wywołał dostęp hook_node na każdym z nich. Wyobraź sobie widok, który pokazuje tysiące węzłów (szczególnie podczas korzystania z pagera). Jeśli logika nie jest wykonywana w SQL, pagery miałyby bardzo nietypową funkcjonalność, dlatego Drupal zmusza cię do zrobienia tego, jak wspomniano rik przy użyciu rekordów dostępu w bazie danych.
Wykonanie access_records to o wiele więcej pracy, ale sprawi, że będzie działać z SQL. Dlatego zalecam użycie istniejącego modułu node_access do rozwiązania twojej funkcjonalności tam, gdzie to możliwe, ponieważ prawdopodobnie zostanie ona zaimplementowana przy użyciu rekordów dostępu, a zatem będzie działać z widokami.
Nawiasem mówiąc, rekordy dostępu są przechowywane w tabeli node_access, jak pokazano poniżej:
Poprzez komentarze do każdej kolumny można zrozumieć ich przeznaczenie. Pomyśl o królestwie jako o systemie używanym do dostępu do węzła, a gid jako o grupie w królestwie. Ta grupa może mieć uprawnienia do przeglądania, aktualizowania i usuwania. Zasadniczo każdy moduł node_access definiuje jedną lub więcej dziedzin (czasami wiele modułów node_access może również pracować równolegle). Użytkownik ma jedną lub więcej kategorii w każdej dziedzinie.
W Drupal do wszystkich zapytań, które mają znacznik „node_access” automatycznie dodana zostanie specjalna logika. Zobacz dokumentację, aby dowiedzieć się więcej o tagowaniu. Ta specjalna logika dołącza do tabeli „node_access” dla każdej dziedziny i dodaje warunek, że gdy „gid” jest równy jednej z linii zastosowanych do użytkownika, użytkownik ma odpowiednie uprawnienia.
Cały ten system pozwala wszystkim zapytaniom poprawnie obsługiwać dostęp do węzła, nawet zliczać zapytania itp. Jest bardzo wydajny, ale ma wyższą krzywą uczenia się niż tylko prosty hook_node_access. O ile to możliwe, użycie istniejącego modułu node_access może zaoszczędzić ci całego bólu głowy.
hook_node_access()
, należy zrobić tylko jedną rzecz: zmienić kod modułu Widoki.