อะไรคือความแตกต่างระหว่างการขัดแย้งการเข้าถึงและการเรียกกลับ?


21

อะไรคือความแตกต่างระหว่างการขัดแย้งการเข้าถึงและการเรียกกลับ?

สมมติว่าฉันตั้งค่า callback access เป็น'user_access'และarray('custom permission')เป็นค่าสำหรับอาร์กิวเมนต์การเข้าถึง

นั่นหมายความว่าอย่างไร? พวกมันมีผลกระทบต่อกันอย่างไร?

คำตอบ:


27

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

ในกรณีที่คุณใช้ชื่อฟังก์ชันสำหรับค่า "access callback" (โดยค่าเริ่มต้นคือ "user_access") จากนั้นคุณสามารถใช้ "access arguments" ซึ่งเป็นอาร์เรย์ที่มีอาร์กิวเมนต์ที่ส่งผ่านไปยังฟังก์ชัน callback access
เช่นเดียวกับการเรียกกลับเมนูอื่น ๆ อาร์กิวเมนต์ต้องเป็นสตริงหรือตัวเลข ในกรณีที่เป็นตัวเลขค่าจะถูกแทนที่ด้วยค่าที่นำมาจากเส้นทางเมนู หากคุณต้องการหลีกเลี่ยงการแทนที่นี้แทนที่จะเป็นตัวเลขคุณต้องใช้สตริง ตัวอย่างเช่นการใช้"1"เป็นข้อโต้แย้งที่ส่งผ่านไปยังการเรียกกลับจะหลีกเลี่ยงการแทนที่อัตโนมัติ

นี่เป็นตัวอย่างของการประกาศการเรียกกลับเมนูที่ใช้จากโมดูลหลักของ Drupal (ตัวอย่างมาจากรหัส Drupal 7 แต่สำหรับสิ่งที่ฉันต้องการชี้ให้เห็นก็ไม่ได้สร้างความแตกต่างเลย)

นี่คือตัวอย่างที่โทรกลับเข้าถึงเป็นuser_access ()

  $items['file/progress'] = array(
    'page callback' => 'file_ajax_progress', 
    'delivery callback' => 'ajax_deliver', 
    'access arguments' => array('access content'), 
    'theme callback' => 'ajax_base_page_theme', 
    'type' => MENU_CALLBACK,
  );

นี่คือตัวอย่างที่การเรียกกลับเข้าถึงไม่ใช่ชื่อฟังก์ชัน

  $items['user'] = array(
    'title' => 'User account', 
    'title callback' => 'user_menu_title', 
    'page callback' => 'user_page', 
    'access callback' => TRUE, 
    'file' => 'user.pages.inc', 
    'weight' => -10, 
    'menu_name' => 'user-menu',
  );

ในกรณีนี้ callback access คือuser_view_access ()ซึ่งถูกส่งผ่านไม่ใช่หมายเลข 1 แต่เป็นค่าที่นำมาจากพา ธ เมนู (ซึ่งในกรณีนี้คือ "user /% user"); user_load()เป็นกรณีนี้โดยเฉพาะอย่างยิ่งเป็นฟังก์ชั่นจะได้รับค่าส่งกลับโดย

  $items['user/%user'] = array(
    'title' => 'My account', 
    'title callback' => 'user_page_title', 
    'title arguments' => array(1), 
    'page callback' => 'user_view_page', 
    'page arguments' => array(1), 
    'access callback' => 'user_view_access', 
    'access arguments' => array(1),
    // By assigning a different menu name, this item (and all registered child
    // paths) are no longer considered as children of 'user'. When accessing the
    // user account pages, the preferred menu link that is used to build the
    // active trail (breadcrumb) will be found in this menu (unless there is
    // more specific link), so the link to 'user' will not be in the breadcrumb. 
    'menu_name' => 'navigation',
  );

สมมติว่าเมนูก่อนหน้านี้มีการกำหนดดังต่อไปนี้และเรียกใช้ด้วยพา ธ เช่น "user / hello"

  $items['user/%'] = array(
    'title' => 'My account', 
    'title callback' => 'user_page_title', 
    'title arguments' => array(1), 
    'page callback' => 'user_view_page', 
    'page arguments' => array(1), 
    'access callback' => 'user_view_access', 
    'access arguments' => array(1),
    // By assigning a different menu name, this item (and all registered child
    // paths) are no longer considered as children of 'user'. When accessing the
    // user account pages, the preferred menu link that is used to build the
    // active trail (breadcrumb) will be found in this menu (unless there is
    // more specific link), so the link to 'user' will not be in the breadcrumb. 
    'menu_name' => 'navigation',
  );

ในกรณีนี้การเรียกกลับจะได้รับเป็นอาร์กิวเมนต์ค่าที่นำมาจากเส้นทาง (0 หมายถึง "ผู้ใช้" และ 1 หมายถึงส่วนหลัง "ผู้ใช้" และเครื่องหมายทับ); ในกรณีนี้ค่านั้นคือ "สวัสดี"

เพื่อทำความเข้าใจข้อโต้แย้งสัญลักษณ์แทนเหล่านี้ให้ดูอาร์กิวเมนต์ Wildcard พับ หน้าเอกสารถูกติดแท็ก Drupal 6 แต่สิ่งที่รายงานยังคงใช้ได้สำหรับ Drupal 7


คำอธิบายที่น่ากลัว ในความต้องการของฉันบางปุ่มที่กำหนดเองพูดว่า "โหวตตอนนี้" ควรจะดำเนินการโดยผู้ใช้ที่ได้รับการรับรองความถูกต้องเท่านั้น แต่ปุ่มควรแสดงต่อผู้ใช้โดยไม่ระบุชื่อด้วยและเมื่อผู้ใช้ที่ไม่ระบุชื่อคลิกว่า สำหรับสถานการณ์เฉพาะนี้มีเงื่อนไขการเข้าถึงพิเศษเพื่อแสดงปุ่มให้ไม่ระบุชื่อหรือไม่? แสดงความคิดเห็นที่นี่เพราะจะทำให้วิกินี้โพสต์สมบูรณ์ยิ่งขึ้น คั่นหน้า .. :)
kiranking

4

การเรียกกลับเป็นฟังก์ชันที่ตรวจสอบว่าผู้ใช้บางคนมีสิทธิ์บางอย่าง การเรียกกลับที่เป็นค่าเริ่มต้นคือuser_access ()

อาร์กิวเมนต์การเข้าถึงแสดงรายการการอนุญาตที่ถูกตรวจสอบโดยการเรียกกลับ เช่น "การเข้าถึงเนื้อหา"


อะไรที่อาจเป็นค่าสำหรับaccess callback? หากเป็นสิ่งอื่นที่นอกเหนือไปจากuser_access()นี้จะเป็นการขจัดความต้องการaccess argumentsหรือไม่
user1359

2
สิ่งที่คุณต้องการ ฟังก์ชันใด ๆ ที่ส่งคืน TRUE หรือ FALSE
Berdir

ดังนั้นคุณไม่ต้องการaccess argumentsอะไร
user1359

ใช่แล้วคุณสามารถข้ามมันได้
Shoaib Nawaz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.