Diese Antwort führte zu einer Diskussion darüber, wie ein Benutzer am besten auf eine bestimmte Seite umgeleitet werden kann, wenn er keinen Zugriff auf die Seite haben soll, auf die er zugreifen möchte.
Eine Möglichkeit besteht darin, den Zugriffsrückruf auf true zu setzen und dann Benutzer im Seitenrückruf umzuleiten. Dies scheint zwar gültig zu sein, aber ich denke, es mischt die Zugriffsfunktionalität mit der Seitenerstellungsfunktionalität im Seitenrückruf.
Z.B
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
}
Eine andere Möglichkeit besteht darin, die Zugriffsrückruffunktion so einzustellen, dass eine Funktion aufgerufen wird, die prüft, ob der Benutzer Zugriff hat. Statt jedoch false zurückzugeben, wird der Benutzer auf eine andere Seite umgeleitet. Dies ist gut, da es die Zugriffslogik und die Seitenerstellungslogik trennt. Der Zweck eines Zugriffsrückrufs besteht jedoch darin, einen booleschen Wert zurückzugeben, sodass diese Logik durch Umleiten des Benutzers verletzt wird.
Z.B
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;
}
Gibt es unerwünschte Auswirkungen der Umleitung von Benutzern im Zugriffsrückruf, die mir nicht bekannt sind?
Was ist Ihrer Meinung nach die beste Vorgehensweise hier?