Apa perbedaan antara argumen akses dan akses panggilan balik?

21

Apa perbedaan antara argumen akses dan akses panggilan balik?

Misalkan saya mengatur akses balik ke 'user_access', dan array('custom permission')merupakan nilai untuk argumen akses.

Apa artinya? Bagaimana mereka saling mempengaruhi?

pengguna1359
sumber

Jawaban:

27

"Akses panggilan balik" adalah fungsi yang dipanggil untuk memverifikasi pengguna memiliki akses ke halaman. Sebagai kasus khusus, itu bisa menjadi nilai TRUE, dan dalam hal itu semua pengguna akan memiliki akses ke sana; dengan kata lain, izin akses akan dilewati.

Jika Anda menggunakan nama fungsi untuk nilai "akses panggilan balik" (secara default, itu adalah "user_access"), maka Anda juga dapat menggunakan "argumen akses", yang merupakan array yang berisi argumen yang diteruskan ke fungsi akses panggilan balik.
Seperti panggilan balik menu lainnya, argumen harus berupa string, atau nomor; dalam kasus ini adalah angka, nilainya akan diganti dengan nilai yang diambil dari jalur menu. Jika Anda ingin menghindari penggantian ini, alih-alih nomor Anda harus menggunakan string; misalnya, menggunakan "1"sebagai argumen untuk diteruskan ke panggilan balik akses akan menghindari penggantian otomatis.

Ini adalah beberapa contoh deklarasi panggilan balik menu yang digunakan dari modul inti Drupal. (Contohnya adalah dari kode Drupal 7, tetapi untuk apa yang ingin saya tunjukkan, itu tidak ada bedanya.)

Ini adalah contoh di mana panggilan balik akses adalah 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,
  );

Ini adalah contoh di mana akses balik bukan nama fungsi.

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

Dalam hal ini, panggilan balik akses adalah user_view_access () yang diteruskan, bukan angka 1, tetapi nilai yang diambil dari jalur menu (yang dalam hal ini adalah "pengguna /% pengguna"); ini adalah kasus khusus, karena fungsi akan mendapatkan nilai yang dikembalikan oleh 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',
  );

Misalkan menu sebelumnya didefinisikan sebagai berikut, dan dipanggil dengan jalur seperti "pengguna / halo."

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

Dalam hal ini, panggilan balik akses akan menerima sebagai argumen nilai yang diambil dari path (0 berarti "pengguna," dan 1 berarti bagian setelah "pengguna" dan garis miring); dalam hal ini, nilai itu adalah "halo."

Untuk lebih memahami argumen wildcard ini, lihat Wildcard Loader Arguments . Halaman dokumentasi ditandai Drupal 6, tetapi apa yang dilaporkan masih berlaku untuk Drupal 7.

kiamlaluno
sumber
penjelasan yang luar biasa. Dalam persyaratan saya beberapa tombol kustom mengatakan "pilih sekarang" harus diproses hanya oleh pengguna yang diautentikasi tetapi tombol harus ditampilkan ke anonim juga dan ketika pengguna anonim mengklik bahwa ia harus mengarahkan ulang ke halaman login dan proses berlanjut. Untuk skenario khusus ini, adakah kondisi akses khusus untuk menampilkan tombol ke anonim ?. Mengomentari di sini karena akan membuat posting ini lebih lengkap wiki.
Ditandai
4

Akses panggilan balik adalah fungsi yang memeriksa jika beberapa pengguna memiliki beberapa izin. Panggilan balik akses default adalah user_access ()

Argumen akses mendaftar izin yang diperiksa oleh akses balik panggilan. mis. "mengakses konten"

Shoaib Nawaz
sumber
Untuk apa lagi nilainya access callback? Jika itu bukan sesuatu yang lain user_access(), apakah itu akan menghilangkan kebutuhan akan access arguments?
user1359
2
Apapun yang kamu mau. Fungsi apa pun yang mengembalikan BENAR atau SALAH.
Berdir
Maka Anda tidak perlu access arguments?
user1359
Ya, maka Anda dapat melewatinya
Shoaib Nawaz