Score:0

ค่าที่ส่งคืนจาก hook_node_access_records() ไม่ถือว่าอนุญาตการเข้าถึง

ธง cn

ฉันกำลังใช้โซลูชันใน Drupal 9 ซึ่งอนุญาตให้ผู้ใช้เห็นเฉพาะโหนดที่อยู่ในกลุ่มเดียวกัน ถ้าโหนดไม่ได้อยู่ในกลุ่มใดๆ ก็ควรจะเห็นโหนดนั้น ฉันเคยใช้ hook_node_grants() เพื่อกำหนดสิทธิ์ให้กับผู้ใช้ปัจจุบันและ hook_node_access_records() เพื่อตั้งค่าการอนุญาตการดูต่อโหนดตามที่แนะนำใน ฉันจะกรองมุมมองตามผลลัพธ์ของ hook_node_access ได้อย่างไร

เมื่อไปที่โหนดที่ผู้ใช้ไม่ควรเห็น ผู้ใช้จะได้รับข้อผิดพลาด 403 ตามผลลัพธ์ที่คาดไว้ ในมุมมอง โหนดจะมองเห็นได้

ฉันสามารถใช้วิธีแก้ปัญหาได้ hook_views_query_alter() และเพิ่มเงื่อนไขการเข้าถึง แต่ฉันชอบโซลูชันทั่วไปมากกว่า

นี่คือรหัสที่ฉันใช้

 ฟังก์ชัน mymodule_node_access_records (NodeInterface $node) {
  ถ้า ($node->hasField('field_group') && !empty($term = $node->field_group->getValue())) {
    $เทอม = รีเซ็ต ($เทอม);
    $grants[] = [
      'realm' => 'mymodule_realm',
      'gid' => $term['target_id'],
      'grant_view' => 1,
      'grant_update' => 0,
      'grant_delete' => 0,
      'ลำดับความสำคัญ' => 0,
    ];

    คืน $grants;
  }
}

 ฟังก์ชัน mymodule_node_grants (AccountInterface $account) {
  $grants = [];
  ถ้า ($group = checkGroupHelper($account)) {
    $grants['mymodule_realm'] = $group;
  }
  คืน $grants;
}
Score:0
ธง cn

ฉันสามารถทำงานนี้ได้โดยเพิ่มแท็ก Query node_access ภายใต้การตั้งค่า Query ของมุมมองของฉัน เริ่มกรองผลลัพธ์ตามตาราง node_access ไม่เคยเห็นมันเป็นข้อกำหนด ดังนั้นมันจึงค่อนข้างแปลก แต่หวังว่ามันจะช่วยให้คนอื่นๆ ที่สงสัยเหมือนฉัน

โพสต์คำตอบ

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