EntityFieldQuery का उपयोग करते समय node_access को बायपास कैसे करें?


12

निम्नलिखित कोड के साथ, यदि वर्तमान उपयोगकर्ता के पास '' बाइपास नोड एक्सेस '' नहीं है ( सटीक सत्यापन के लिए _node_query_node_access_alter) देखें , तो नोड_access के लिए क्वेरी की जाँच करें, भले ही मैं "नोड_केस" टैग का उपयोग नहीं करता।

मैं एक गैर-व्यवस्थापक उपयोगकर्ता के लिए निम्न क्वेरी के साथ node_access जाँच से कैसे बच सकता हूँ?

मैं एक मॉड्यूल से इस कोड का उपयोग कर रहा हूं, इसलिए मैं अनुमतियों को स्वयं सत्यापित कर सकता हूं, नोड_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 को जोड़ा गया अधिक जानकारी के लिए।

EntityFieldQueryएक्सेस चेक बायपास करने की अनुमति देने के लिए क्वेरी टैग में "DANGEROUS_ACCESS_CHECK_OPT_OUT" जोड़ा गया है। पहले, के माध्यम से निष्पादित प्रश्नों EntityFieldQueryको हमेशा नोड एक्सेस सिस्टम द्वारा बदल दिया जाएगा, संभवतः अप्रत्याशित व्यवहार और डेटा हानि का कारण होगा।

यदि आपको अपने मॉड्यूल के एपीआई के भीतर एक आंतरिक क्वेरी में एक्सेस चेक को बायपास करने की आवश्यकता है, तो आप इस टैग को जोड़ सकते हैं, लेकिन यदि आवश्यक हो तो आपको केवल ऐसा करना चाहिए। यदि यह क्वेरी टैग एक क्वेरी में जोड़ा जाता है जिसके परिणाम उपयोगकर्ता को प्रदर्शित किए जाएंगे, तो यह सभी एक्सेस चेक को बायपास कर देगा, संभवतः संवेदनशील जानकारी को उजागर करेगा।

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

वाह, मैं कुछ समय के लिए इस द्वारा अटक गया है अब भी इसे साकार करने के बिना। जब इस तरह के प्रश्नों के असंख्य असंख्य उपयोग होते हैं तो यह "खतरनाक" है। : पी
रयान सजामा

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();

EDIT: DANGEROUS_ACCESS_CHECK_OPT_OUTDrupal 7.15 सुरक्षा रिलीज के हिस्से के रूप में एक विकल्प जोड़ा गया है।


1
यह एक अच्छा बदलाव की तरह लग रहा है, धन्यवाद डेमियन!
Weboide
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.