Jawaban ini mengarah pada diskusi tentang cara terbaik untuk mengarahkan pengguna ke halaman tertentu jika mereka tidak memiliki akses ke halaman yang mereka coba akses.
Salah satu opsi adalah untuk mengatur akses balik ke true dan kemudian mengarahkan pengguna ke halaman panggilan balik. Sementara ini tampaknya valid saya pikir itu mencampur fungsionalitas akses dengan fungsi membangun halaman di halaman panggilan balik.
Misalnya
function hook_menu() {
$items['player/my_page'] = array(
'title' => t('My Page'), // note this is a required parameter
'access callback' => TRUE,
'page callback' => 'some_function',
);
return $items;
}
function some_function() {
global $user;
if(!$user->uid) { // here checking if the user is logged in but could be checking for a specific permission or field value
$dest = drupal_get_destination();
drupal_goto('user/login', $dest); // this remembers where the user is coming from
}
// carry on building rest of page
}
Pilihan lain adalah mengatur fungsi akses balik untuk memanggil fungsi yang memeriksa apakah pengguna memiliki akses, tetapi alih-alih mengembalikan false, itu akan mengarahkan pengguna ke halaman lain. Ini bagus karena memisahkan logika akses dan logika pembuatan halaman. Namun tujuan dari panggilan balik akses adalah untuk mengembalikan nilai boolean, jadi ini melanggar logika itu dengan mengarahkan ulang pengguna.
Misalnya
function hook_menu() {
$items['player/my_page'] = array(
'title' => t('My Page'), // note this is a required parameter
'access callback' => 'check_access',
'page callback' => 'some_function',
);
return $items;
}
function check_access() {
global $user;
// here checking if the user is logged in but could be checking for a specific permission or field value
if(!$user->uid) {
$dest = drupal_get_destination();
drupal_goto('user/login', $dest);
}
return TRUE;
}
Apakah ada efek yang tidak diinginkan dari mengarahkan ulang pengguna dalam panggilan balik akses yang saya tidak ketahui?
Menurut Anda apa praktik terbaik di sini?
sumber
Jawaban:
Saya pikir Anda bisa melakukan ini dengan mengubah fungsi pengiriman panggilan balik. Jika akses panggilan balik kembali
FALSE
itulah yang diteruskan ke panggilan balik pengiriman. Jika Anda menginginkan perilaku pengalihan ini hanya pada halaman tertentu, Anda dapat mengubah callback pengiriman hanya untuk halaman tersebut melaluihook_menu()
atauhook_menu_alter()
. Jika Anda ingin perilaku menjadi global, Anda dapat menggunakanhook_page_delivery_callback_alter()
untuk mengubahnya.Berikut ini contoh panggilan balik pengiriman.
Btw ini belum diuji, dan saya tidak pernah benar-benar mengubah callback pengiriman saya sebelumnya.
sumber
hook_menu_alter
:$items['player/my_page']['delivery callback'] = 'player_my_page_delivery';
Saya tidak akan melakukannya di akses balik. Jika pengembang lain ingin mengubah
page_callback
di beberapa titik di masa depan, mereka akhirnya akan menggaruk-garuk kepala mengapa callback tidak berfungsi ketika Anda mengarahkan kembali dalam akses panggilan balik.sumber