ฉันกำลังใช้โซลูชันใน 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;
}