Score:1

ตัวจัดการการเข้าถึงเอนทิตีทำให้เกิด "ผลลัพธ์ของตัวควบคุมอ้างว่าให้ข้อมูลเมตาของแคชที่เกี่ยวข้อง แต่ตรวจพบข้อมูลเมตาที่รั่วไหล"

ธง ph

ฉันกำลังเขียนตัวจัดการการเข้าถึงเอนทิตีแบบกำหนดเองสำหรับเอนทิตีแบบกำหนดเองที่จะตรวจสอบว่าผู้ใช้มีสิทธิ์เข้าถึงโหนดพื้นฐานหรือไม่ รหัส checkAccess() มีลักษณะดังนี้:

$uuid = $entity->uuid->getString();
ถ้า (isset($uuid)) {
  $nodes = $this->node->getQuery()->accessCheck(TRUE)->condition('uuid', $uuid)->execute();
  ถ้า (!empty($nodes)) {
    กลับ AccessResult::allowed();
  }
}
กลับ AccessResult::forbidden("การเข้าถึงถูกปฏิเสธ");

ปัญหาคือเมื่อฉันไปที่ปลายทาง jsonapi สำหรับเอนทิตี ฉันได้รับข้อผิดพลาด "ผลลัพธ์ของผู้ควบคุมอ้างว่าให้ข้อมูลเมตาของแคชที่เกี่ยวข้อง แต่ตรวจพบข้อมูลเมตาที่รั่วไหล โปรดตรวจสอบว่าคุณไม่ได้แสดงเนื้อหาเร็วเกินไป ส่งคืนคลาสวัตถุ: Drupal\jsonapi\CacheableResourceResponse"

ถ้าฉันส่งคืน accessResult::allowed() ก่อนการสืบค้น $nodes ก็จะใช้งานได้ เกิดอะไรขึ้นที่นี่?

4uk4 avatar
cn flag
ข้อมูลเมตาของ accessCheck(TRUE) รั่ว โปรดดู https://drupal.stackexchange.com/questions/251864/logicexception-the-controller-result-claims-to-be-providing-relevant-cache-meta ทำไมไม่ใช้ $entity->access('view')
Lambic avatar
ph flag
ดูเหมือนว่าถ้าฉันโหลดโหนดแล้วทำ $node->access('view') มันใช้งานได้ จะโพสต์ว่าเป็นคำตอบ
Score:2
ธง ph

ดูเหมือนว่าการใช้ accessCheck(TRUE) จะทำให้เกิดสิ่งนี้ ดังนั้นวิธีแก้ปัญหาคือ:

ถ้า (isset($uuid)) {
  $node = $this->node->loadByProperties(['uuid' => $uuid]);
  $node = รีเซ็ต($การกระทำ);
  ถ้า ($node->การเข้าถึง('ดู')) {
    กลับ AccessResult::allowed();
  }
}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา