Представления используют SQL для определения узлов для отображения. К сожалению, из соображений производительности Drupal просто не сможет выполнить node_load для всех потенциальных кандидатов, а затем вызвать hook_node_access для каждого из них. Представьте себе представление, которое показывает тысячи узлов (особенно при использовании пейджера). Если логика не реализована в SQL, то пейджеры будут иметь очень необычную функциональность, поэтому Drupal заставляет вас делать это, как упоминалось ранее, используя записи доступа в вашей базе данных.
Создание access_records довольно много работы, но заставит его работать с SQL. Поэтому я рекомендую использовать существующий модуль node_access для решения вашей функциональности везде, где это возможно, потому что он, вероятно, будет реализован с использованием записей доступа и, следовательно, будет работать с представлениями.
Между прочим, записи доступа хранятся в таблице node_access таблицы, как показано ниже:
Посредством комментариев для каждого столбца вы можете получить представление об их назначении. Представьте, что сфера - это система, используемая для доступа к узлам, а гид - как группа внутри области. Эта группа может иметь права просмотра, обновления и удаления. В общем, каждый модуль node_access определяет одну или несколько областей (иногда несколько модулей node_access также могут работать параллельно). У пользователя есть один или несколько гидов в каждой из областей.
В Drupal все запросы, имеющие тег «node_access», автоматически будут иметь некоторую специальную логику. См. Документацию, чтобы узнать больше о маркировке. Эта специальная логика объединяет таблицу «node_access» для каждой области и добавляет условие, что, когда «gid» равен одному из gid, примененных к пользователю, пользователь имеет соответствующие разрешения.
Вся эта система позволяет всем запросам правильно обрабатывать node_access, даже считать запросы и т. Д. Она очень мощная, но имеет более высокую кривую обучения, чем просто hook_node_access. Когда это возможно, использование существующего модуля node_access может избавить вас от всей этой головной боли.
hook_node_access()
помощью, то нужно просто сделать следующее: изменить код модуля Views.