Sự khác biệt giữa các đối số truy cập và gọi lại truy cập là gì?


21

Sự khác biệt giữa các đối số truy cập và gọi lại truy cập là gì?

Giả sử tôi đặt cuộc gọi lại truy cập thành 'user_access'array('custom permission')là giá trị cho các đối số truy cập.

Điều đó nghĩa là gì? Làm thế nào để họ ảnh hưởng lẫn nhau?

Câu trả lời:


27

"Truy cập gọi lại" là chức năng được gọi để xác minh người dùng có quyền truy cập vào trang. Trong trường hợp đặc biệt, nó có thể là giá trị TRUEvà trong trường hợp đó, tất cả người dùng sẽ có quyền truy cập vào nó; nói cách khác, quyền truy cập sẽ bị bỏ qua.

Trong trường hợp bạn đang sử dụng tên hàm cho giá trị "truy cập gọi lại" (theo mặc định, đó là "user_access"), thì bạn cũng có thể sử dụng "đối số truy cập", là một mảng chứa các đối số được truyền cho hàm gọi lại truy cập.
Cũng như các cuộc gọi lại menu khác, các đối số phải là một chuỗi hoặc một số; trong trường hợp đó là một số, giá trị sẽ được thay thế bằng giá trị được lấy từ đường dẫn menu. Nếu bạn muốn tránh sự thay thế này, thay vì một số bạn cần sử dụng một chuỗi; ví dụ: sử dụng "1"làm một cho các đối số được truyền cho cuộc gọi lại truy cập sẽ tránh được việc thay thế tự động.

Đây là một số ví dụ về khai báo gọi lại menu được sử dụng từ các mô-đun lõi Drupal. (Các ví dụ được lấy từ mã Drupal 7, nhưng với những gì tôi muốn chỉ ra, điều đó không tạo ra sự khác biệt nào.)

Đây là một ví dụ trong đó cuộc gọi lại truy cập là 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,
  );

Đây là một ví dụ trong đó gọi lại truy cập không phải là một tên hàm.

  $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',
  );

Trong trường hợp này, cuộc gọi lại truy cập là user_view_access () được truyền, không phải là số 1, mà là một giá trị được lấy từ đường dẫn menu (trong trường hợp này là "user /% user"); đây là một trường hợp cụ thể, vì hàm sẽ nhận được giá trị trả về 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',
  );

Giả sử menu trước được định nghĩa như sau và được gọi bằng một đường dẫn như "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',
  );

Trong trường hợp này, cuộc gọi lại truy cập sẽ nhận được dưới dạng đối số giá trị được lấy từ đường dẫn (0 có nghĩa là "người dùng" và 1 có nghĩa là phần sau "người dùng" và dấu gạch chéo); trong trường hợp này, giá trị đó là "xin chào."

Để hiểu rõ hơn về các đối số ký tự đại diện này, hãy xem Đối số trình tải ký tự đại diện . Trang tài liệu được gắn thẻ Drupal 6, nhưng những gì được báo cáo vẫn còn hiệu lực đối với Drupal 7.


giải thích tuyệt vời. Trong yêu cầu của tôi, một số nút tùy chỉnh nói "bỏ phiếu ngay" chỉ được xử lý bởi người dùng được xác thực nhưng nút cũng được hiển thị thành ẩn danh và khi người dùng ẩn danh nhấp vào đó anh ta sẽ chuyển hướng đến trang đăng nhập và quá trình tiếp tục. Đối với kịch bản cụ thể này, có điều kiện truy cập đặc biệt để hiển thị nút thành ẩn danh?. Bình luận ở đây vì nó sẽ làm cho bài đăng này đầy đủ hơn wiki. Đã đánh dấu .. :)
kiranking

4

Truy cập gọi lại là một chức năng kiểm tra nếu một số người dùng có một số quyền. Cuộc gọi lại truy cập mặc định là user_access ()

Đối số truy cập liệt kê quyền được kiểm tra bằng cách gọi lại truy cập. ví dụ: "nội dung truy cập"


Những gì khác có thể là một giá trị cho access callback? Nếu đó là một cái gì đó khác hơn user_access(), điều đó sẽ làm giảm nhu cầu access arguments?
dùng1359

2
Bất cứ điều gì bạn muốn. Bất kỳ hàm nào trả về TRUE hoặc FALSE.
Berdir

Vì vậy, sau đó bạn sẽ không cần access arguments?
dùng1359

Vâng, sau đó bạn có thể bỏ qua nó
Shoaib Nawaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.