Puncte:0

Restricționați accesul la un anumit nod în funcție de rol

drapel jp

Lucrez la un proiect Drupal 9. Trebuie să restricționez accesul la nodul cu id 1083 pentru rolul de utilizator „delegat”. Pentru asta am folosit hook_node_access_records() și hook_node_grants():

/**
 * Implementează hook_node_access_records().
 */
funcția wtotfaf_user_node_access_records(NodeInterface $nod) {
  $granturi = [];
  if ($nod->id() == 1083) {
    $grants[] = [
      'realm' => 'delegate_view_activity_tracker',
      // Numirea tărâmului depinde de tine.
      'gid' => 12,
      'grant_view' => 1,
      'grant_update' => 0,
      'grant_delete' => 0,
    ];
    $grants[] = [
      'realm' => 'administrator_view_activity_tracker',
      // Numirea tărâmului depinde de tine.
      'gid' => 11,
      'grant_view' => 1,
      'grant_update' => 1,
      'grant_delete' => 1,
    ];
    $grants[] = [
      'realm' => 'editor_view_activity_tracker',
      // Numirea tărâmului depinde de tine.
      'gid' => 13,
      'grant_view' => 1,
      'grant_update' => 1,
      'grant_delete' => 1,
    ];
  }
  returnează $grants;
}

/**
 * Implementează hook_node_grants().
 */
funcția wtotfaf_user_node_grants($cont, $op) {
  $granturi = [];
  $roluri = $cont->getRoles();
  if (in_array('administrator', $roluri)) {
    $grants['administrator_view_activity_tracker'] = [11];
  }
  elseif (in_array('delegat', $roluri)) {
    $grants['delegate_view_activity_tracker'] = [12];
  }
  elseif (in_array('editor', $roluri)) {
    $grants['editor_view_activity_tracker'] = [13];
  }
  returnează $grants;
}

In db am asta: introduceți descrierea imaginii aici

Nodul cu id 251 nu este disponibil pentru alte roluri după modificările mele. Ce este în neregulă cu codul? Cum pot restricționa accesul pentru rolul de utilizator „delegat” numai pentru id-ul nodului 1083?

Kevin avatar
drapel in
În schimb, ar trebui să utilizați unul dintre diferitele module de control al accesului
drapel in
Se pare că doriți https://www.drupal.org/project/nodeaccess
Asatur Vardanyan avatar
drapel jp
Multumesc mult pentru sugestii. Am rezolvat-o cu granturi. Am uitat să reconstruiesc permisiunile.
jbarrio avatar
drapel cn
Eu personal m-aș baza pe hook_node_access() care vă va aduce entitatea, operațiunea și interfața de cont. Pe baza asta, aș face revenirea și aș apela cachePerPermissions() pentru a mă asigura că acest lucru nu încetinește nimic.

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.