この回答は、ユーザーがアクセスしようとしているページへのアクセスを許可されていない場合に、ユーザーを特定のページにリダイレクトする最良の方法についての議論につながりました。
1つのオプションは、アクセスコールバックをtrueに設定してから、ページコールバックでユーザーをリダイレクトすることです。これは有効なようですが、ページコールバックでアクセス機能とページ作成機能を混在させていると思います。
例えば
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
}
別のオプションは、ユーザーがアクセス権を持っているかどうかをチェックする関数を呼び出すようにアクセスコールバック関数を設定することですが、falseを返す代わりに、ユーザーを別のページにリダイレクトします。アクセスロジックとページ作成ロジックを分離しているので、これは良いことです。ただし、アクセスコールバックの目的はブール値を返すことなので、これはユーザーをリダイレクトすることによってそのロジックを壊しています。
例えば
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;
}
私が知らないアクセスコールバックでユーザーをリダイレクトすることによる望ましくない影響はありますか?
ここでのベストプラクティスは何だと思いますか?