Drupalのカスタマイズ、開発にhook_menuがよく使用します。メニューのパス設定が比較的に簡単だが、各ページへのアクセス管理方法が複雑で、少し理解し難しいです。但し、アクセス権限管理が理解したら、コーティング上は比較的に簡単です。
やりたいこと
- hook_menuを利用して、ユーザーのアカウントビュー(/user/%user)にFacebook連携タブを追加します
- Facebook連携タブへのアクセス権限はログインユーザー自身のみとなります
- ログインユーザーが自分のFacebook連携タブへのアクセスが可能
- ログインユーザーがほかのユーザーのアカウントビューでのFacebook連携タブへのアクセスが不可
hook_menuの「access callback」関数の使用
- 「access callback」にTRUEまたFALSEを返せば、ユーザーのアクセス権限管理ができます。
- 「access callback」にカスタム関数名を渡し、その関数名の関数をロードして、実行されます。
/**
* Implements hook_menu().
*/
function [my-module-name]_menu(){
$items['user/%user/fbconnect'] = array( //ユーザーアカウントビューにタブを追加
'title' => t('Facebook Connect'),
'page callback' => 'fb_connect_form',
'page arguments' => array(1),
'access callback' => '_fboauth_access_control', //タブへのアクセス管理ファンクション
'type' => MENU_LOCAL_TASK ,
'weight' => 10 ,
'file' => 'includes/fboauth.fbconnect.inc' ,
);
return $items;
}
- ファンクション「_fboauth_access_control」にログインユーザーと自分のみのタブへのアクセス定義
function _fboauth_access_control(){
global $user;
$path_arr = explode('/', current_path());
if( $user->uid > 0 && count($path_arr)>1 ){ //$user->uid>0: 匿名ユーザーのuidは'0'(ゼロ)
if( $user->name == $path_arr[1] ||
$user->uid == $path_arr[1] ) //URLパスにあるユーザーIDと名前(URLエイリアス使用の場合)の比較
return true;
}
return false;
}
- 上記条件でTRUEかFALSEを「access callback」に返します
- システムが「access callback」の結果をユーザーのアクセス制限を行います。