Приветствую!
Выстраиваю систему доступа к материалам сайта через 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. Правильно ли вообще так делать?
Комментарии
Все 3 нупкта может решить content_access
