Esta respuesta condujo a una discusión sobre la mejor manera de redirigir a un usuario a una página específica si no deberían tener acceso a la página a la que intentan acceder.
Una opción es establecer la devolución de llamada de acceso en verdadero y luego redirigir a los usuarios en la devolución de llamada de la página. Si bien esto parece válido, creo que combina la funcionalidad de acceso con la funcionalidad de creación de páginas en la devolución de llamada de la página.
P.ej
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
}
Otra opción es configurar la función de devolución de llamada de acceso para llamar a una función que verifica si el usuario tiene acceso, pero luego, en lugar de devolver falso, redirigirá al usuario a otra página. Esto es bueno ya que separa la lógica de acceso y la lógica de creación de páginas. Sin embargo, el propósito de una devolución de llamada de acceso es devolver un valor booleano, por lo que esto está rompiendo esa lógica al redirigir al usuario.
P.ej
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;
}
¿Hay algún efecto indeseable al redirigir a los usuarios en la devolución de llamada de acceso que desconozco?
¿Cuál crees que es la mejor práctica aquí?