Lượt xem sử dụng SQL xác định các nút để hiển thị. Đáng buồn thay, vì lý do hiệu suất, đơn giản là không khả thi khi Drupal thực hiện một nút_load trên tất cả các ứng cử viên tiềm năng và sau đó gọi hook_node_access trên mỗi một trong số họ. Hãy tưởng tượng một khung nhìn hiển thị hàng ngàn nút (đặc biệt là khi sử dụng máy nhắn tin). Nếu logic không được thực hiện trong SQL thì máy nhắn tin sẽ có chức năng rất bất thường, do đó, Drupal buộc bạn làm điều đó như rik đã đề cập bằng cách sử dụng các bản ghi truy cập trong cơ sở dữ liệu của bạn.
Tạo access_records là một công việc hợp lý hơn nhưng sẽ làm cho nó hoạt động với SQL. Do đó, tôi khuyên bạn nên sử dụng mô-đun node_access hiện có để giải quyết chức năng của mình bất cứ khi nào có thể bởi vì nó có thể sẽ được triển khai bằng các bản ghi truy cập và do đó sẽ hoạt động với các khung nhìn.
Bằng cách này, các bản ghi truy cập được lưu trữ trong bảng node_access như bảng dưới đây:
Thông qua các nhận xét cho mỗi cột, bạn có thể hiểu được mục đích của chúng. Hãy nghĩ về vương quốc như hệ thống được sử dụng để truy cập nút và gid là nhóm trong một lĩnh vực. Nhóm đó có thể có quyền xem, cập nhật và xóa quyền. Nói chung, mỗi mô-đun node_access xác định một hoặc nhiều cảnh giới (đôi khi nhiều mô-đun node_access cũng có thể hoạt động song song). Một người dùng có một hoặc nhiều gids trong mỗi cõi.
Trong Drupal, tất cả các truy vấn có thẻ "node_access" sẽ tự động được thêm một số logic đặc biệt. Xem tài liệu để tìm hiểu thêm về gắn thẻ. Logic đặc biệt này tham gia bảng "node_access" cho mỗi vương quốc và thêm điều kiện trong đó "gid" bằng với một trong các gids được áp dụng cho người dùng, người dùng có quyền thích hợp.
Toàn bộ hệ thống này cho phép tất cả các truy vấn xử lý đúng cách node_access, thậm chí đếm các truy vấn, v.v ... Nó rất mạnh nhưng có đường cong học tập cao hơn chỉ bằng hook_node_access đơn giản. Bất cứ khi nào có thể, sử dụng mô-đun node_access hiện có có thể giúp bạn đỡ đau đầu.
hook_node_access()
, thì chỉ cần thực hiện một điều: thay đổi mã mô-đun Lượt xem.