2012-03-19 83 views
1

我使用的是Tank Auth,我的項目將支持兩種訪問類型:「普通用戶」和「管理員」。我查看了坦克auth數據庫,並且有一個「isadmin」字段,所以我相信當我登錄到我的系統時可能會重定向到/admin/user在Codeigniter中使用tank_auth進行管理訪問

我怎樣才能做到這一點?我只看到is_logged_in()

我已經看到這個:http://codeigniter.com/forums/viewthread/207245/但我只想重定向到/user/admin URL取決於是否管理員。

回答

4

不幸的是,Tank_Auth未附帶任何內置的用戶組或權限功能。我不確定您看到的字段名爲isadmin,因爲它似乎不屬於current default setup的一部分,我不能在包文件中甚至找不到「admin」這個詞。

這是我能想到的最簡單的方法:

添加你所提到的用戶表中的is_admin場和人工管理。

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

與Tank_Auth目前的方式做工作,你會讀取來自會話的用戶數據,所以你必須將它添加到會話上登錄。

// 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 2012-03-19 04:04:09

+0

我還是很驚訝沒有更多的認證庫可用於CI,但是再次沒有那麼驚訝,因爲每個人的需求都不一樣。我更喜歡自己推出。我不喜歡Tank_Auth如何從會話中直接讀取用戶名等。例如,如果我停用用戶,我希望他們立即啓動。 – 2012-03-19 04:05:58

+0

我同意,但是就像你說每個人都有不同的需求。我個人不喜歡CI原生AR我更喜歡使用php-activerecord因此我需要推出自己的。我認爲現在大多數auth庫已經過時了。 – Philip 2012-03-19 04:19:36