Score:0

เพิ่มการเข้าถึงโหนดเดียวโดยทางโปรแกรมผ่านโมดูล ACL

ธง ng

ฉันใช้เวลาหนึ่งวันในการพยายามหาสาเหตุที่รหัสของฉันใช้ไม่ได้ ฉันกำลังพยายามเพิ่มการเข้าถึงให้กับผู้ใช้ในโหนดเดียวโดยทางโปรแกรม มันบันทึกข้อมูลใน 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->ลบทั้งหมด();
}

ข้อเสนอแนะใด ๆ ?

Kevin avatar
in flag
นี่คือรหัสที่กำหนดเองทั้งหมด? ไม่มีโมดูลที่สนับสนุน?
ng flag
โค้ดด้านบนเป็นแบบกำหนดเองทั้งหมด แต่ฟังก์ชันพื้นฐานมาจากโมดูล acl มันทำงานผ่านอินเทอร์เฟซการดูแลระบบ แต่ฉันต้องเพิ่มหรือลบการเข้าถึงทางโปรแกรมในรหัสที่กำหนดเอง ฉันคิดว่าฉันกำลังข้ามสิ่งกีดขวางบางอย่างที่เป็นสาเหตุของปัญหา
Kevin avatar
in flag
ไม่แสดงวิธีการเรียกรหัสนี้
ng flag
มันถูกเรียกจากคอนโทรลเลอร์ แต่ฉันไม่คิดว่ามันสำคัญที่จะถูกเรียกจากที่ใด
Kevin avatar
in flag
เป็นสิ่งสำคัญหากไม่ได้ผล

โพสต์คำตอบ

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