Am petrecut o zi încercând să-mi dau seama de ce codul meu nu funcționează. Încerc să adaug acces la un utilizator pe un singur nod în mod programatic. Salvează înregistrarea în DB și când vizitez pagina de control al accesului pentru un anumit nod, utilizatorul este listat în LISTELE DE CONTROL DE ACCES UTILIZATOR. Cu toate acestea, atunci când vizitez nodul în calitate de utilizator, mi se refuză accesul.
Am încercat tot felul de combinații, dar codul meu actual este cam așa:
$node,$account = 'vine din logica anterioară, .irelevant...';
$acl_id = content_access_get_acl_id($node, 'view');
$conexiune = Baza de date::getConnection();
//verificați că înregistrarea există!
$rezultat = $conexiune->select('acl_user', 'au')
->fields('au')
->condition('au.acl_id', $acl_id)
->condition('au.uid', $account->id())
->execute();
$rows = $result->fetchAll();
if(gol ($rânduri)) {
$connection->insert('acl_user')
->câmpuri([
'acl_id' => $acl_id,
'uid' => $account->id(),
])->execute();
$settings = content_access_get_per_node_settings($course_node);
//dpm($settings,'settings');
\Drupal::entityTypeManager()->getAccessControlHandler('nod')->writeGrants($node);
\Drupal::moduleHandler()->invokeAll('user_acl', $settings);
$grants = \Drupal::moduleHandler()->invokeAll('node_access_records', [$node]);
\Drupal::moduleHandler()->alter('node_access_records', $grants, $node);
$nod->salvare();
if(node_access_needs_rebuild()) {
node_access_rebuild();
node_access_needs_rebuild(FALSE);
}
foreach (Cache::getBins() ca $cache_backend) {
$cache_backend->deleteAll();
}
Vreun feedback?