Implementez o soluție în Drupal 9 în care utilizatorii au voie să vadă doar nodurile care aparțin aceluiași grup. Dacă un nod nu aparține niciunui grup, ar trebui să îl poată vedea.
am folosit hook_node_grants()
să atribuie dreptul de acordare utilizatorului curent și hook_node_access_records()
pentru a seta acordarea vizualizării per nod, așa cum este sugerat în Cum filtrez o vizualizare după rezultatele hook_node_access?
Când vizitează un nod pe care un utilizator nu trebuie să-l vadă, utilizatorul primește o eroare 403, ca rezultat așteptat. Pe o vedere, nodul este vizibil, totuși.
Ca soluție, aș putea implementa hook_views_query_alter()
și adaug o condiție de acces, dar prefer o soluție mai generică.
Acesta este codul pe care îl folosesc.
funcția mymodule_node_access_records(NodeInterface $nod) {
if ($nod->hasField('field_group') && !empty($term = $node->field_group->getValue())) {
$term = resetare($term);
$grants[] = [
'realm' => 'mymodule_realm',
'gid' => $term['target_id'],
'grant_view' => 1,
'grant_update' => 0,
'grant_delete' => 0,
'prioritate' => 0,
];
returnează $granturi;
}
}
function mymodule_node_grants(AccountInterface $cont) {
$granturi = [];
dacă ($grup = checkGroupHelper($cont)) {
$grants['mymodule_realm'] = $grup;
}
returnează $granturi;
}