it-swarm-vi.com

Làm cách nào để bỏ qua node_access khi sử dụng EntityFieldQuery?

Với đoạn mã sau, nếu người dùng hiện tại không có 'bypass access access' (xem _ node_query_node_access_alter () để xác minh chính xác), thì truy vấn sẽ kiểm tra node_access, mặc dù tôi không sử dụng "node_access " nhãn.

Làm cách nào tôi có thể tránh kiểm tra node_access bằng truy vấn sau đây cho người dùng không phải là quản trị viên?

Tôi đang sử dụng mã này từ một mô-đun, vì vậy tôi có thể tự xác minh quyền, không cần kiểm tra 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 cho phép bạn bỏ qua quyền truy cập vào nút.

Xem thẻ truy vấn DANGEROUS_ACCESS_CHECK_OPT_OUT được thêm vào EntityFieldQuery để biết thêm thông tin.

Thẻ truy vấn "DANGEROUS_ACCESS_CHECK_OPT_OUT" đã được thêm vào EntityFieldQuery để cho phép bỏ qua kiểm tra truy cập. Trước đây, các truy vấn được thực hiện thông qua EntityFieldQuery sẽ luôn bị hệ thống truy cập nút thay đổi, có khả năng gây ra hành vi và mất dữ liệu không mong muốn.

Nếu bạn cần bỏ qua kiểm tra truy cập trong truy vấn nội bộ trong API của mô-đun, bạn có thể thêm thẻ này, nhưng bạn chỉ nên làm như vậy nếu cần thiết. Nếu thẻ truy vấn này được thêm vào truy vấn có kết quả sẽ được hiển thị cho người dùng, nó sẽ bỏ qua tất cả các kiểm tra truy cập, có khả năng lộ thông tin nhạy cảm.

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

Câu trả lời là bạn không thể.

Cách giải quyết duy nhất tôi có thể nghĩ về nó để thêm siêu dữ liệu 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();

CHỈNH SỬA: a DANGEROUS_ACCESS_CHECK_OPT_OUT tùy chọn đã được thêm vào như một phần của bản phát hành bảo mật Drupal 7.15.

11
Damien Tournoud