メインコンテンツに移動

メインナビゲーション

  • ホーム
  • サイトマップ
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • hook_menuでのログインユーザーのみ自分ページへのアクセス管理

hook_menuでのログインユーザーのみ自分ページへのアクセス管理

drupal
menu
customization

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」の結果をユーザーのアクセス制限を行います。
ホーム

古松

検索

Article Category

  • apache(7)
  • css(19)
  • drupal(295)
  • Electron(4)
  • html(34)
  • javascript(27)
  • laravel(4)
  • linux(5)
  • macOS(2)
  • mysql(13)
  • php(19)
  • python(4)
  • SEO(12)
  • video(72)
  • Visual Studio Code(4)
  • windows(13)
  • wordpress(32)