2012-03-19 9 views
1

私はTank Authを使用しています。私のプロジェクトでは、「通常のユーザー」と「管理者」という2つのアクセスタイプがサポートされます。私はタンク認証データベースを見て、 "isadmin"フィールドがあるので、私は自分のシステムにログインすると/adminまたは/userにリダイレクトすることができると信じています。Codeigniterのtank_authによる管理アクセス

どうすればいいですか?私はis_logged_in()しか見ることができません。

私は既にこれを見ました:http://codeigniter.com/forums/viewthread/207245/ですが、私は/userまたは/adminにリダイレクトするだけで、管理者であるかどうかに依存します。

答えて

4

残念ながら、Tank_Authには、ユーザーグループまたはアクセス許可の機能が組み込まれていません。というフィールドがどこにあるのか分かりません。current default setupの一部ではないようですパッケージファイルに "admin"という言葉が含まれています。あなたはユーザーテーブルに言及is_adminフィールドを追加し、それを手動で管理する

これは私が考えることができる最も簡単な解決策です。 Tank_Authが現在ない方法での作業

ALTER TABLE `users` 
ADD COLUMN `is_admin` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0'; 

、あなたはセッションからユーザデータを読み込むことがありますので、あなたは、ログイン時にセッションに追加する必要があります。

// Tank_Auth.php Line 71 
$this->ci->session->set_userdata(array(
    'is_admin' => (bool) $user->is_admin, // added 
    'user_id' => $user->id, 
    'username' => $user->username, 
    'status' => ($user->activated == 1) ? STATUS_ACTIVATED : STATUS_NOT_ACTIVATED, 
)); 

次にライブラリに独自の機能を追加します。

function is_admin() 
{ 
    return $this->logged_in() && $this->ci->session->userdata('is_admin') === TRUE; 
} 

次にあなたがログイン時リダイレクトのログインコントローラにこれを追加する必要があります:

// controllers/auth.php Line 30 
function login() 
{ 
    if ($this->tank_auth->is_admin()) { 
     redirect('admin'); 
    } elseif ($this->tank_auth->is_logged_in()) { 
     redirect('user'); 
    } 
    // Rest of code stays untouched... 
} 

続いてい管理コントローラは常に$this->tank_auth->is_admin()をチェックします。

は、これは私があなたの目標を達成するために提供することができます最短ルートである - おそらくない最高ができますが、デフォルトでは、ユーザ・グループを処理しIon_Authに興味があるかもしれません。

+0

は最高のソリューションのようです。 – Philip

+0

私はまだCIに利用できる認証ライブラリがそれ以上存在しないことに驚いていますが、皆さんのニーズが異なるために驚くことではありません。私は自分自身を転がすことを好む。私はTank_Authがセッションからユーザ名などを直接読み込む方法が気に入らない。たとえば、私がユーザを非アクティブにすると、すぐに起動したい。 –

+0

私は同意しますが、誰もが異なるニーズを持っていると言えます。個人的には、私はCIのネイティブARのように私はPHPのアクティブレコードを使用することを好むので、私は自分自身をロールバックする必要があります。私はほとんどのauthのライブラリは時代遅れだと思う。 – Philip

関連する問題