web-gelistirme-sc.com

EntityFieldQuery kullanırken node_access nasıl atlanır?

Aşağıdaki kodla, geçerli kullanıcı 'baypas düğümü erişimine' sahip değilse (kesin doğrulama için bkz. _ node_query_node_access_alter () ), sorgu "node_access kullanmasam da" node_access için kontrol eder " etiket.

Yönetici olmayan bir kullanıcı için aşağıdaki sorgu ile node_access denetimini nasıl önleyebilirim?

Bu kodu bir modülden kullanıyorum, bu yüzden izinleri kendim doğrulayabilirim, node_access denetimlerine gerek yok.

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

Drupal 7.15, düğümdeki erişimi atlamanıza olanak tanır.

Daha fazla bilgi için bkz --- DANGEROUS_ACCESS_CHECK_OPT_OUT sorgu etiketi EntityFieldQuery .

Erişim denetimlerinin atlanmasına izin vermek için EntityFieldQuery klasörüne bir "DANGEROUS_ACCESS_CHECK_OPT_OUT" sorgu etiketi eklendi. Önceden, EntityFieldQuery aracılığıyla yürütülen sorgular düğüm erişim sistemi tarafından her zaman değiştirilir ve bu da beklenmedik davranışlara ve veri kaybına neden olabilir.

Modülünüzün API'sındaki dahili bir sorgudaki erişim denetimlerini atlamanız gerekiyorsa, bu etiketi ekleyebilirsiniz, ancak bunu yalnızca gerekliyse yapmanız gerekir. Bu sorgu etiketi, sonuçları kullanıcıya görüntülenecek olan bir sorguya eklenirse, hassas bilgileri gösterme olasılığı bulunan tüm erişim denetimlerini atlar.

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

Cevap, yapamayacağınızdır.

Bir account meta veri eklemek için düşünebildiğim tek geçici çözüm:

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

DÜZENLE: a DANGEROUS_ACCESS_CHECK_OPT_OUT seçeneği Drupal 7.15 güvenlik sürümünün bir parçası olarak eklenmiştir.

11
Damien Tournoud