Node access alkalmazása nem node alapú nézeten

czigor képe

A Views modul csak node alapú nézetekre joinolja magától a node_access táblát. Bármilyen más esetben kézzel kell gondoskodnunk arról, hogy a felhasználó csak azokat az adatokat lássa, amelyeket valóban szeretnénk.

Mi node-okhoz kapcsolt field_collectionöket listáztunk Views-zal. Ez a pár sor kód oldotta meg, hogy a node_access tábla akcióba lépjen:

/**
 * Implements hook_query_TAG_alter().
 */
function MYMODULE_query_views_MYVIEWNAME_alter($query) {
  // Add a node_access join to a field_collection view.
  $query->addTag('node_access')->addMetaData('base_table', 'field_data_MYFIELDCOLLECTIONNAME');
  _node_query_node_access_alter($query, 'entity');
}

Magyarázat:

  1. MYMODULE a hookot implementáló modul neve.
  2. MYVIEWNAME a listát készítő nézet gépi neve.
  3. A hook azért fut le, mert minden views query megkapja a views_MYVIEWNAME taget.
  4. MYFIELDCOLLECTIONNAME a node-on lévő field collection mező gépi neve.
  5. A _node_query_node_access_alter($query, 'entity'); hívás 'entity' argumentuma hatására a 'field_data_MYFIELDCOLLECTIONNAME' tábla az 'entity_id' oszlopánál fogva lesz joinolva a node_access táblához. Ha 'nid' oszlopunk van, akkor az 'entity' helyébe 'node'-ot kell tenni.

Technológia: Drupal 7node access