2012-03-19 84 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