Les vues utilisent SQL pour déterminer les nœuds à afficher. Malheureusement, pour des raisons de performances, il ne serait tout simplement pas possible pour Drupal d'effectuer un node_load sur tous les candidats potentiels, puis d'appeler hook_node_access sur chacun de ceux-ci. Imaginez une vue qui montre des milliers de nœuds (surtout lorsque vous utilisez un pager). Si la logique n'est pas effectuée en SQL, les pageurs auraient des fonctionnalités très inhabituelles, donc Drupal vous oblige à le faire comme indiqué précédemment en utilisant les enregistrements d'accès dans votre base de données.
Faire access_records est beaucoup plus de travail mais le fera fonctionner avec SQL. Je recommande donc d'utiliser un module node_access existant pour résoudre vos fonctionnalités autant que possible, car il sera probablement implémenté à l'aide des enregistrements d'accès et fonctionnera donc avec les vues.
Par la façon dont les enregistrements d'accès sont stockés dans la table node_access , comme indiqué ci-dessous:
Grâce aux commentaires pour chaque colonne, vous pouvez comprendre leur objectif. Considérez le domaine comme le système utilisé pour l'accès aux nœuds et le gid comme le groupe au sein d'un domaine. Ce groupe peut avoir des autorisations d'affichage, de mise à jour et de suppression. En général, chaque module node_access définit un ou plusieurs domaines (parfois plusieurs modules node_access peuvent également fonctionner en parallèle). Un utilisateur a un ou plusieurs gids dans chacun des domaines.
Dans Drupal, toutes les requêtes qui ont la balise "node_access" auront automatiquement une logique spéciale ajoutée. Consultez la documentation pour en savoir plus sur le balisage. Cette logique spéciale rejoint la table "node_access" pour chaque domaine et ajoute la condition que lorsque le "gid" est égal à l'un des gids appliqués à un utilisateur, l'utilisateur dispose de l'autorisation appropriée.
L'ensemble de ce système permet à toutes les requêtes de gérer correctement node_access, même de compter les requêtes, etc. Il est très puissant mais a une courbe d'apprentissage plus élevée que le simple hook_node_access. Dans la mesure du possible, l'utilisation d'un module node_access existant peut vous éviter tout ce mal de tête.
hook_node_access()
, il y a juste une chose à faire: modifier le code du module Views.