不幸的是,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它的默认操作处理的用户群体。
听起来像是最好的解决方案。 – Philip 2012-03-19 04:04:09
我还是很惊讶没有更多的认证库可用于CI,但是再次没有那么惊讶,因为每个人的需求都不一样。我更喜欢自己推出。我不喜欢Tank_Auth如何从会话中直接读取用户名等。例如,如果我停用用户,我希望他们立即启动。 – 2012-03-19 04:05:58
我同意,但是就像你说每个人都有不同的需求。我个人不喜欢CI原生AR我更喜欢使用php-activerecord因此我需要推出自己的。我认为现在大多数auth库已经过时了。 – Philip 2012-03-19 04:19:36