Score:0

จำกัดการเข้าถึงโหนดเฉพาะตามบทบาท

ธง jp

ฉันกำลังทำงานในโครงการ Drupal 9 ฉันต้องการจำกัดการเข้าถึงโหนดด้วยรหัส 1083 สำหรับบทบาทผู้ใช้ "ผู้รับมอบสิทธิ์" สำหรับสิ่งนี้ฉันได้ใช้ hook_node_access_records() และ hook_node_grants():

/**
 * ใช้ hook_node_access_records()
 */
ฟังก์ชัน wtotfaf_user_node_access_records (NodeInterface $node) {
  $grants = [];
  ถ้า ($node->id() == 1083) {
    $grants[] = [
      'realm' => 'delegate_view_activity_tracker',
      // การตั้งชื่ออาณาจักรนั้นขึ้นอยู่กับคุณ
      'gid' => 12,
      'grant_view' => 1,
      'grant_update' => 0,
      'grant_delete' => 0,
    ];
    $grants[] = [
      'realm' => 'administrator_view_activity_tracker',
      // การตั้งชื่ออาณาจักรนั้นขึ้นอยู่กับคุณ
      'gid' => 11,
      'grant_view' => 1,
      'grant_update' => 1,
      'grant_delete' => 1,
    ];
    $grants[] = [
      'ขอบเขต' => 'editor_view_activity_tracker',
      // การตั้งชื่ออาณาจักรนั้นขึ้นอยู่กับคุณ
      'gid' => 13,
      'grant_view' => 1,
      'grant_update' => 1,
      'grant_delete' => 1,
    ];
  }
  คืน $grants;
}

/**
 * ใช้ hook_node_grants()
 */
ฟังก์ชัน wtotfaf_user_node_grants (บัญชี $, $op) {
  $grants = [];
  $roles = $account->getRoles();
  ถ้า (in_array ('ผู้ดูแลระบบ' $ บทบาท)) {
    $grants['administrator_view_activity_tracker'] = [11];
  }
  อื่น (in_array ('ผู้รับมอบสิทธิ์' $ บทบาท)) {
    $grants['delegate_view_activity_tracker'] = [12];
  }
  อื่น (in_array ('บรรณาธิการ' $ บทบาท)) {
    $grants['editor_view_activity_tracker'] = [13];
  }
  คืน $grants;
}

ใน db ฉันมีสิ่งนี้: ป้อนคำอธิบายรูปภาพที่นี่

โหนดที่มีรหัส 251 ไม่พร้อมใช้งานสำหรับบทบาทอื่นหลังจากการเปลี่ยนแปลงของฉัน เกิดอะไรขึ้นกับรหัส? ฉันจะจำกัดการเข้าถึงสำหรับบทบาทผู้ใช้ 'ผู้รับมอบสิทธิ์' สำหรับโหนด id 1083 เท่านั้นได้อย่างไร

Kevin avatar
in flag
คุณควรใช้หนึ่งในโมดูลการควบคุมการเข้าถึงต่างๆ แทน
in flag
ดูเหมือนว่าคุณต้องการ https://www.drupal.org/project/nodeaccess
Asatur Vardanyan avatar
jp flag
ขอบคุณมากสำหรับคำแนะนำ ฉันได้แก้ไขด้วยเงินช่วยเหลือ ฉันลืมสร้างการอนุญาตใหม่
jbarrio avatar
cn flag
โดยส่วนตัวแล้วฉันพึ่งพา hook_node_access() ซึ่งจะนำเอนทิตี การดำเนินการ และอินเทอร์เฟซบัญชีมาให้คุณ ตามที่ฉันจะส่งคืนและฉันจะเรียก cachePerPermissions() เพื่อให้แน่ใจว่าสิ่งนี้จะไม่ทำให้อะไรช้าลง

โพสต์คำตอบ

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