วิธีการหลีกเลี่ยง node_access เมื่อใช้ EntityFieldQuery


12

ด้วยรหัสต่อไปนี้หากผู้ใช้ปัจจุบันไม่มี 'บายพาสการเข้าถึงโหนด' (ดู_node_query_node_access_alter ()สำหรับการตรวจสอบที่แน่นอน) ดังนั้นแบบสอบถามจะตรวจสอบ node_access แม้ว่าฉันจะไม่ใช้แท็ก "node_access"

ฉันจะหลีกเลี่ยงการตรวจสอบ node_access ด้วยแบบสอบถามต่อไปนี้สำหรับผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบได้อย่างไร

ฉันกำลังใช้รหัสนี้จากโมดูลดังนั้นฉันจึงสามารถตรวจสอบการอนุญาตได้ด้วยตนเองโดยไม่จำเป็นต้องตรวจสอบ node_access

  $query = new EntityFieldQuery;
  $result = $query
    ->entityCondition('entity_type', 'node')
    ->entityCondition('bundle', 'foo')
    ->fieldCondition('custom_id', 'value', $custom_id)
    ->execute();

คำตอบ:


26

Drupal 7.15 ช่วยให้คุณสามารถเลี่ยงการเข้าถึงโหนด

ดูDANGEROUS_ACCESS_CHECK_OPT_OUT เพิ่มแท็กข้อความค้นหาลงใน EntityFieldQueryสำหรับข้อมูลเพิ่มเติม

เพิ่มแท็กแบบสอบถาม "DANGEROUS_ACCESS_CHECK_OPT_OUT" EntityFieldQueryเพื่ออนุญาตการข้ามการตรวจสอบการเข้าถึง ก่อนหน้านี้เคียวรีที่ดำเนินการผ่านEntityFieldQueryจะถูกเปลี่ยนแปลงโดยระบบการเข้าถึงโหนดเสมอซึ่งอาจทำให้เกิดพฤติกรรมที่ไม่คาดคิดและการสูญเสียข้อมูล

หากคุณต้องการข้ามการตรวจสอบการเข้าถึงในแบบสอบถามภายในภายใน API ของโมดูลคุณอาจเพิ่มแท็กนี้ แต่คุณควรทำเฉพาะเมื่อจำเป็นเท่านั้น หากมีการเพิ่มแท็กคิวรีนี้ลงในคิวรีซึ่งผลลัพธ์จะปรากฏแก่ผู้ใช้แท็กแบบสอบถามนี้จะข้ามการตรวจสอบการเข้าถึงทั้งหมดซึ่งอาจเปิดเผยข้อมูลที่ละเอียดอ่อน

function MYMODULE_field_query($field) {
  $query = new EntityFieldQuery();
  return $query
    ->fieldCondition($field)
    ->addTag('DANGEROUS_ACCESS_CHECK_OPT_OUT')
    ->execute();
}

ว้าวฉันติดมันมาซักพักแล้วโดยที่ไม่รู้ตัว รักที่มันเป็น "อันตราย" เมื่อมีการใช้งานไร้เดียงสานับไม่ถ้วนสำหรับการค้นหาดังกล่าว : P
Ryan Szrama

11

คำตอบคือคุณไม่สามารถ

วิธีแก้ปัญหาเดียวที่ฉันสามารถนึกถึงเพื่อเพิ่มaccountข้อมูลเมตา:

$query = new EntityFieldQuery;
$result = $query
  ->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'foo')
  ->fieldCondition('custom_id', 'value', $custom_id)
  ->addMetaData('account', user_load(1))
  ->execute();

แก้ไข: DANGEROUS_ACCESS_CHECK_OPT_OUTมีการเพิ่มตัวเลือกเป็นส่วนหนึ่งของการวางจำหน่ายการรักษาความปลอดภัย Drupal 7.15


1
นั่นเป็นวิธีแก้ปัญหาที่ดีขอบคุณดาเมียน!
Weboide
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.