ฉันใช้เวลาหนึ่งวันในการพยายามหาสาเหตุที่รหัสของฉันใช้ไม่ได้ ฉันกำลังพยายามเพิ่มการเข้าถึงให้กับผู้ใช้ในโหนดเดียวโดยทางโปรแกรม มันบันทึกข้อมูลใน DB และเมื่อฉันไปที่หน้าการควบคุมการเข้าถึงสำหรับโหนดที่กำหนด ผู้ใช้จะแสดงรายการภายใต้รายการควบคุมการเข้าถึงของผู้ใช้ อย่างไรก็ตาม เมื่อฉันไปที่โหนดในฐานะผู้ใช้คนนั้น ฉันถูกปฏิเสธการเข้าถึง
ฉันลองใช้ชุดค่าผสมทั้งหมด แต่รหัสปัจจุบันของฉันเป็นดังนี้:
$node,$account = 'มาจากตรรกะก่อนหน้า, .irrelevant...';
$acl_id = content_access_get_acl_id($โหนด, 'ดู');
$connection = ฐานข้อมูล::getConnection();
// ตรวจสอบบันทึกที่มีอยู่!
$result = $connection->select('acl_user', 'au')
->เขตข้อมูล ('au')
->เงื่อนไข('au.acl_id', $acl_id)
->condition('au.uid', $account->id())
->ดำเนินการ ();
$rows = $result->fetchAll();
ถ้า (ว่าง ($ แถว)) {
$connection->insert('acl_user')
->ฟิลด์ ([
'acl_id' => $acl_id,
'uid' => $account->id(),
])->ดำเนินการ ();
$settings = content_access_get_per_node_settings($course_node);
//dpm($settings,'settings');
\Drupal::entityTypeManager()->getAccessControlHandler('node')->writeGrants($node);
\Drupal::moduleHandler()->invokeAll('user_acl', $settings);
$grants = \Drupal::moduleHandler()->invokeAll('node_access_records', [$node]);
\Drupal::moduleHandler()->alter('node_access_records', $grants, $node);
$node->save();
ถ้า (node_access_needs_rebuild ()) {
node_access_rebuild();
node_access_needs_rebuild (เท็จ);
}
foreach (แคช::getBins() เป็น $cache_backend) {
$cache_backend->ลบทั้งหมด();
}
ข้อเสนอแนะใด ๆ ?