باستخدام الكود التالي ، إذا لم يكن لدى المستخدم الحالي "إمكانية الوصول إلى العقدة الالتفافية" (انظر _ 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();
يسمح لك Drupal 7.15 بتجاوز الوصول على العقدة.
راجع تمت إضافة DANGEROUS_ACCESS_CHECK_OPT_OUT علامة استعلام إلى EntityFieldQuery لمزيد من المعلومات.
تمت إضافة علامة استعلام "DANGEROUS_ACCESS_CHECK_OPT_OUT" إلى
EntityFieldQuery
للسماح بتجاوز عمليات فحص الوصول. في السابق ، كانت الاستعلامات المنفذة من خلالEntityFieldQuery
دائمًا ما يتم تعديلها بواسطة نظام الوصول إلى العقدة ، مما قد يتسبب في سلوك غير متوقع وفقدان البيانات.إذا كنت بحاجة إلى تجاوز عمليات التحقق من الوصول في استعلام داخلي داخل واجهة برمجة التطبيقات للوحدة النمطية الخاصة بك ، فيمكنك إضافة هذه العلامة ، ولكن يجب عليك القيام بذلك فقط إذا لزم الأمر. إذا تمت إضافة علامة الاستعلام هذه إلى استعلام سيتم عرض نتائجه للمستخدم ، فستتجاوز جميع عمليات فحص الوصول ، مما قد يعرض المعلومات الحساسة.
function MYMODULE_field_query($field) { $query = new EntityFieldQuery(); return $query ->fieldCondition($field) ->addTag('DANGEROUS_ACCESS_CHECK_OPT_OUT') ->execute(); }
الجواب هو أنك لا تستطيع.
الحل الوحيد الذي يمكنني التفكير فيه لإضافة 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 إصدار الأمان.