Puncte:0

Adăugați acces la un singur nod în mod programatic prin modulul ACL

drapel ng

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?

Kevin avatar
drapel in
Acesta este tot cod personalizat? Niciun modul contribuit?
drapel ng
Codul de mai sus este personalizat, dar funcționalitatea de bază provine din modulul acl. Funcționează prin interfața de administrare, dar trebuie să adaug sau să elimin accesul programatic în cod personalizat. Cred că ocolesc un fel de cârlig care îmi provoacă problemele.
Kevin avatar
drapel in
Nu arată cum este numit acest cod
drapel ng
Se cheamă de la un controler, dar nu cred că este important de unde este numit.
Kevin avatar
drapel in
Este important dacă nu funcționează.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.