Views ใช้ SQL เพื่อกำหนดโหนดที่จะแสดง น่าเศร้าด้วยเหตุผลด้านประสิทธิภาพมันจึงไม่น่าเป็นไปได้ที่ Drupal จะดำเนินการ node_load กับผู้สมัครที่มีศักยภาพทั้งหมดแล้วจึงเรียกใช้ hook_node_access ในแต่ละรายการของพวกเขาทั้งหมด ลองนึกภาพมุมมองที่แสดงหลายพันโหนด (โดยเฉพาะอย่างยิ่งเมื่อใช้เพจเจอร์) หากตรรกะไม่ได้ทำใน SQL แล้ววิทยุติดตามตัวจะมีฟังก์ชั่นที่ผิดปกติอย่างมากดังนั้น Drupal บังคับให้คุณทำตามที่ระบุไว้โดยใช้บันทึกการเข้าถึงในฐานข้อมูลของคุณ
การทำให้ access_records เป็นงานจำนวนมาก แต่จะทำให้มันทำงานกับ SQL ได้ ดังนั้นฉันขอแนะนำให้ใช้โมดูล node_access ที่มีอยู่เพื่อแก้ไขฟังก์ชั่นของคุณทุกที่ที่เป็นไปได้เพราะมันอาจจะถูกนำมาใช้โดยใช้บันทึกการเข้าถึงและจะทำงานร่วมกับมุมมอง
โดยวิธีการบันทึกการเข้าถึงจะถูกเก็บไว้ในตารางnode_accessตารางที่เห็นด้านล่าง:
ผ่านความคิดเห็นสำหรับแต่ละคอลัมน์ที่คุณสามารถเข้าใจวัตถุประสงค์ของพวกเขา คิดถึง realm เป็นระบบที่ใช้สำหรับการเข้าถึงโหนดและ gid เป็นกลุ่มภายใน realm กลุ่มนั้นสามารถมีสิทธิ์ดูอัปเดตและลบได้ โดยทั่วไปแต่ละโมดูล node_access กำหนดหนึ่งหรือมากกว่าหนึ่งอาณาจักร (บางครั้งหลายโมดูล node_access สามารถทำงานแบบขนาน) ผู้ใช้มีหนึ่งหรือมากกว่าหนึ่ง gids ในแต่ละอาณาจักร
ใน Drupal การค้นหาทั้งหมดที่มีแท็ก "node_access" จะมีการเพิ่มตรรกะพิเศษบางอย่างโดยอัตโนมัติ ดูเอกสารประกอบเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการติดแท็ก ตรรกะพิเศษนี้รวมตาราง "node_access" สำหรับแต่ละ realm และเพิ่มเงื่อนไขที่ซึ่ง "gid" เท่ากับหนึ่งใน gids ที่ใช้กับผู้ใช้ผู้ใช้มีสิทธิ์ที่เหมาะสม
ระบบทั้งหมดนี้อนุญาตให้เคียวรีทั้งหมดจัดการอย่างถูกต้อง node_access แม้แต่นับจำนวนเคียวรี ฯลฯ มันมีประสิทธิภาพมาก แต่มีเส้นโค้งการเรียนรู้ที่สูงขึ้นซึ่งเป็นเพียง hook_node_access ที่ง่าย เมื่อใดก็ตามที่เป็นไปได้การใช้โมดูล node_access ที่มีอยู่จะช่วยให้คุณปวดหัวได้ทั้งหมด
hook_node_access()
ๆ มีสิ่งที่ควรทำคือการเปลี่ยนรหัสโมดูล Views