Рейтинг:0

Значения, возвращаемые функцией hook_node_access_records(), не считаются разрешающими доступ

флаг cn

Я реализую решение в Drupal 9, в котором пользователям разрешено видеть только узлы, принадлежащие к их той же группе. Если узел не принадлежит ни к одной группе, они должны его увидеть. я использовал крючок_node_grants () назначить права предоставления текущему пользователю и hook_node_access_records() чтобы установить разрешение на просмотр для каждого узла, как предложено в Как отфильтровать представление по результатам hook_node_access?

При посещении узла, который пользователь не должен видеть, пользователь получает ошибку 403, как и ожидалось. Однако в представлении узел виден.

В качестве обходного пути я мог бы реализовать hook_views_query_alter() и добавьте условие доступа, но я предпочитаю более общее решение.

Это код, который я использую.

 функция mymodule_node_access_records(NodeInterface $node) {
  if ($node->hasField('field_group') && !empty($term = $node->field_group->getValue())) {
    $термин = сброс($термин);
    $ гранты [] = [
      'область' => 'mymodule_realm',
      'гид' => $term['target_id'],
      'грант_просмотр' => 1,
      'грант_обновление' => 0,
      'грант_удалить' => 0,
      'приоритет' => 0,
    ];

    возврат $грантов;
  }
}

 функция mymodule_node_grants (AccountInterface $ учетная запись) {
  $гранты = [];
  если ($group = checkGroupHelper($account)) {
    $grants['mymodule_realm'] = $group;
  }
  возврат $грантов;
}
Рейтинг:0
флаг cn

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

Ответить или комментировать

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