Questa risposta ha portato a una discussione sul modo migliore per reindirizzare un utente a una pagina specifica se non dovrebbero avere accesso alla pagina a cui stanno tentando di accedere.
Un'opzione è impostare il callback di accesso su true e quindi reindirizzare gli utenti nel callback della pagina. Anche se questo sembra valido, penso che stia mescolando la funzionalità di accesso con la funzionalità di creazione della pagina nel callback della pagina.
Per esempio
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
}
Un'altra opzione è quella di impostare la funzione di callback di accesso per chiamare una funzione che controlla se l'utente ha accesso, ma invece di restituire false, reindirizzerebbe l'utente a un'altra pagina. Questo è buono in quanto sta separando la logica di accesso e la logica di costruzione della pagina. Tuttavia, lo scopo di un callback di accesso è quello di restituire un valore booleano, quindi ciò interrompe tale logica reindirizzando l'utente.
Per esempio
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;
}
Vi sono effetti indesiderati dal reindirizzamento degli utenti nel callback di accesso di cui non sono a conoscenza?
Quale pensi sia la migliore pratica qui?