次のコードでは、現在のユーザーが「ノードアクセスのバイパス」を持たない場合(正確な検証については _ node_query_node_access_alter() を参照)、「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では、ノードへのアクセスをバイパスできます。
詳細については、EntityFieldQueryに追加された DANGEROUS_ACCESS_CHECK_OPT_OUTクエリタグ を参照してください。
「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(); }
答えはあなたができないということです。
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セキュリティリリースの一部として追加されました。