hook_node_grants - запрос к материалам при выводе ноды

Главные вкладки

Аватар пользователя kleomash kleomash 12 декабря 2017 в 12:59

Приветствую!

Выстраиваю систему доступа к материалам сайта через hook_node_grants().

Схема такая:
1. Материл может иметь один из трёх уровней доступа:
- все пользователи, включая неавторизованных (0)
- авторизованные пользователь (1)
- только из списка пользователей (2)

Проблема с организацией доступа по второму варианту.

С hook_node_access() разобрался, он прописывает данные в таблицу как и задумано, для материалов второго типа в поле gid записываю nid соответствующего материала.

В hook_node_grants() пытаюсь выдать права на доступ к материалам, получив список материалов, у которых поле доступа установлено во второй вариант.

<?php
/**
 * Возвращает проекты, у которых установлен уровень доступа "Авторизованные пользователи" (1)
 */
  
$query = new EntityFieldQuery();
  
$query->entityCondition('entity_type''node')
    ->
entityCondition('bundle''projects_project')
    ->
propertyCondition('status'NODE_PUBLISHED)
    ->
fieldCondition('field_projects_access''value'1'=');

    

$result $query->execute();
  if (isset(
$result['node']))
  {
    
$project_items_nids array_keys($result['node']);
  }
  
  return !empty(
$project_items_nids) ? $project_items_nids : array();
?>

Во время формирования вьюшки, отображающей список материалов все отрабатывает отлично. Но при отображении страницы материалы выполнение запроса приводит ступору. Проблема именно в запросе, так как если массив данных сформировать вручную и вернуть его, то все отрабатывает без проблем.

Сейчас я решил эту проблему, загоняя все полученные данные в кеш и сохраняя их там. Этот вариант приемлем, но после сброса кеша надо обязательно вывести вьюшку, чтобы кеш обновился, иначе при попытке зайти на страницу вылетает ошибка.

По итогу 3 вопроса:

1. Можно ли на сброс кеша повесить какой-нибудь хук, чтобы вернуть в кеш нужные мне данные?
2. Почему не получается выполнить запрос по материалам при выводе ноды?
3. Правильно ли вообще так делать?

Комментарии