Я реализую решение в 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;
}
возврат $грантов;
}