O Views usa SQL determina os nós a serem exibidos. Infelizmente, por razões de desempenho, simplesmente não seria viável para o Drupal executar uma carga de nó em todos os possíveis candidatos e, em seguida, chamar hook_node_access em cada um deles. Imagine uma exibição que mostre milhares de nós (especialmente ao usar um pager). Se a lógica não for feita no SQL, os pagers teriam uma funcionalidade muito incomum, portanto, o Drupal o força a fazê-lo como o rik mencionado, usando registros de acesso em seu banco de dados.
Tornar access_records é uma quantidade razoável de trabalho, mas fará com que funcione com o SQL. Portanto, recomendo usar um módulo node_access existente para resolver sua funcionalidade sempre que possível, porque provavelmente será implementado usando registros de acesso e, portanto, funcionará com visualizações.
A propósito, os registros de acesso são armazenados na tabela node_access, conforme mostrado abaixo:
Através dos comentários de cada coluna, você pode entender o propósito deles. Pense na região como o sistema usado para acesso ao nó e o gid como o grupo em uma região. Esse grupo pode ter permissões de visualização, atualização e exclusão. Em geral, cada módulo node_access define uma ou mais regiões (às vezes vários módulos node_access também podem funcionar em paralelo). Um usuário tem um ou mais gids em cada uma das regiões.
No Drupal, todas as consultas que possuem a tag "node_access" terão automaticamente alguma lógica especial adicionada. Consulte a documentação para saber mais sobre a marcação. Essa lógica especial une a tabela "node_access" para cada região e adiciona a condição de que onde o "gid" é igual a um dos gids aplicados a um usuário, o usuário tem a permissão apropriada.
Todo esse sistema permite que todas as consultas gerenciem adequadamente o node_access, contem consultas, etc. É muito poderoso, mas possui uma curva de aprendizado mais alta que apenas o hook_node_access simples. Sempre que possível, o uso de um módulo node_access existente pode economizar toda essa dor de cabeça.
hook_node_access()
, basta executar uma ação: alterar o código do módulo Views.