it-swarm-id.com

Bagaimana cara memotong node_access saat menggunakan EntityFieldQuery?

Dengan kode berikut, jika pengguna saat ini tidak memiliki 'akses bypass node' (lihat _ node_query_node_access_alter () untuk verifikasi yang tepat), maka permintaan memeriksa node_access, meskipun saya tidak menggunakan "node_access "tag.

Bagaimana saya bisa menghindari pemeriksaan node_access dengan permintaan berikut untuk pengguna non-admin?

Saya menggunakan kode ini dari modul, jadi saya bisa memverifikasi izin sendiri, tidak perlu cek node_access.

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

Drupal 7.15 memungkinkan Anda untuk memotong akses pada node.

Lihat DANGEROUS_ACCESS_CHECK_OPT_OUT tag kueri ditambahkan ke EntityFieldQuery untuk informasi lebih lanjut.

Tag kueri "DANGEROUS_ACCESS_CHECK_OPT_OUT" telah ditambahkan ke EntityFieldQuery untuk memungkinkan melewati pemeriksaan akses. Sebelumnya, query yang dieksekusi melalui EntityFieldQuery akan selalu diubah oleh sistem akses node, berpotensi menyebabkan perilaku tak terduga dan kehilangan data.

Jika Anda perlu memintas pemeriksaan akses dalam kueri internal dalam API modul Anda, Anda dapat menambahkan tag ini, tetapi Anda hanya boleh melakukannya jika perlu. Jika tag kueri ini ditambahkan ke kueri yang hasilnya akan ditampilkan kepada pengguna, itu akan mem-bypass semua pemeriksaan akses, yang berpotensi mengekspos informasi sensitif.

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

Jawabannya adalah Anda tidak bisa.

Satu-satunya solusi yang dapat saya pikirkan adalah menambahkan account metadata:

$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: a DANGEROUS_ACCESS_CHECK_OPT_OUT opsi telah ditambahkan sebagai bagian dari rilis keamanan Drupal 7.15.

11
Damien Tournoud