Las vistas usan SQL para determinar los nodos a mostrar. Lamentablemente, por razones de rendimiento, simplemente no sería factible que Drupal realice una carga de nodo en todos los candidatos potenciales y luego llame a hook_node_access en cada uno de ellos. Imagine una vista que muestra miles de nodos (especialmente cuando se usa un buscapersonas). Si la lógica no se realiza en SQL, entonces los buscapersonas tendrían una funcionalidad muy inusual, por lo que Drupal lo obliga a hacerlo como se menciona utilizando los registros de acceso en su base de datos.
Hacer que access_records sea mucho más trabajo pero hará que funcione con SQL. Por lo tanto, recomiendo usar un módulo node_access existente para resolver su funcionalidad siempre que sea posible porque probablemente se implementará utilizando registros de acceso y, por lo tanto, funcionará con vistas.
Por cierto, los registros de acceso se almacenan en la tabla tabla_acceso_nodo como se ve a continuación: a
través de los comentarios para cada columna, puede comprender su propósito. Piense en el reino como el sistema utilizado para el acceso a los nodos y el gid como el grupo dentro de un reino. Ese grupo puede tener permisos para ver, actualizar y eliminar. En general, cada módulo node_access define uno o más reinos (a veces, varios módulos node_access también pueden funcionar en paralelo). Un usuario tiene uno o más gids en cada uno de los reinos.
En Drupal, todas las consultas que tengan la etiqueta "node_access" tendrán automáticamente alguna lógica especial agregada. Consulte la documentación para obtener más información sobre el etiquetado. Esta lógica especial se une a la tabla "node_access" para cada reino y agrega la condición de que donde el "gid" es igual a uno de los gid aplicados a un usuario, el usuario tiene el permiso apropiado.
Todo este sistema permite que todas las consultas manejen correctamente el nodo_acceso, incluso contar consultas, etc. Es muy potente pero tiene una curva de aprendizaje más alta que el simple hook_node_access. Siempre que sea posible, usar un módulo node_access existente puede ahorrarle todo este dolor de cabeza.
hook_node_access()
, solo hay una cosa que debe hacerse: alterar el código del módulo de Vistas.