[CodeIgniter2] Tank_authに独自項目を追加する

公開
更新日

スポンサーリンク

CodeIgniterにはユーザー管理機能がデフォルトでは備わっていませんので、Tank_authというライブラリを使っています。Tank Authは新規登録やログイン、パスワードリセットなど、ユーザー管理系で必要な機能は一通り実装されていますが、ユーザー権限の設定などはできません。

そこで、Tank Authをカスタマイズして、ユーザーモードという項目を追加することにします。管理者や一般、ゲストといったユーザーレベルを設定可能にしようというわけですね。

以下はそのカスタマイズのメモです。なお、Tank Authのインストールが終わり、普通に使えていることを前提とした解説です。

Step.1 テーブルに項目を追加

usersテーブルにカラムを追加します。カラム名はお好きなもので。ここではmodeにしました。種別はintでもvarcharでもどちらでも。権限の種類が少ないならint(1)で充分でしょう。デフォルト値を最も低い権限に設定しておきます。

Step.2 Tank_auth.phpを改造

application/Tank_auth.phpを改造します。といっても、3カ所ほどコードを書き足すだけです。

71行目付近。ログイン時にユーザーモードもセッションに保存しておくようにします。

$this->ci->session->set_userdata(array(
  'user_id'   => $user->id,
  'username'  => $user->username,
  'status'    => ($user->activated == 1) ? STATUS_ACTIVATED : STATUS_NOT_ACTIVATED,
));

$this->ci->session->set_userdata(array(
  'user_id'   => $user->id,
  'username'  => $user->username,
  'status'    => ($user->activated == 1) ? STATUS_ACTIVATED : STATUS_NOT_ACTIVATED,
  'user_mode' => $user->mode
));

116行目付近。ログアウト時にユーザーモードも破棄されるようにします。

$this->ci->session->set_userdata(array('user_id' => '', 'username' => '', 'status' => ''));

$this->ci->session->set_userdata(array('user_id' => '', 'username' => '', 'status' => '' ,'user_mode' => ''));

567行目付近。オートログイン時にユーザーモードがセッションに保存されるようにします。ログイン時の処理と同じです。

$this->ci->session->set_userdata(array(
  'user_id'  => $user->id,
  'username' => $user->username,
  'status'   => ($user->activated == 1) ? STATUS_ACTIVATED : STATUS_NOT_ACTIVATED,
));

$this->ci->session->set_userdata(array(
  'user_id'   => $user->id,
  'username'  => $user->username,
  'status'    => ($user->activated == 1) ? STATUS_ACTIVATED : STATUS_NOT_ACTIVATED,
  'user_mode' => $user->mode
));

モードを返すメソッドを、Tank_authクラスのどこでもいいので追加します。

function get_user_mode()
{
  return $this->ci->session->userdata('user_mode');
}

これでユーザーモードを使用することができるようになりました。後はユーザーモードを設定する機能を追加すれば完成です。

ユーザーモードの設定については省きます。デフォルトでは一般ユーザーでの登録になっています。管理者権限の付与などは各サイトの運用によって実装が違ってくるでしょうから。

使い方

tank_authをロード後、$this->tank_auth->get_user_mode()でユーザーモードが受け取れるようになっています。管理者以外はアクセスさせないなら以下のようにします。

$this->load->library('tank_auth');
if( $this->tank_auth->get_user_mode() != 'admin' ){
  redirect( $redirect_path );
}

スポンサーリンク


Comment