在Codeigniter中使用tank_auth进行管理员访问

时间:2012-03-19 00:45:20

标签: codeigniter tankauth

我正在使用Tank Auth,我的项目将支持两种访问类型:“普通用户”和“管理员”。我查看了tank auth数据库并且有一个“isadmin”字段,所以我相信当我登录我的系统时,它可能会重定向到/admin/user

我该怎么做?我只看到is_logged_in()

我已经看到了这一点:http://codeigniter.com/forums/viewthread/207245/但我只希望重定向到/user/admin网址,具体取决于是否为管理员。

1 个答案:

答案 0 :(得分:4)

不幸的是,Tank_Auth没有内置任何类型的用户组或权限功能。我不确定你在哪里看到一个名为isadmin的字段,因为它似乎不是is_admin的一部分{3}}我甚至在包文件中找不到“admin”这个词。

这是我能想到的最简单的解决方案:

将您提到的ALTER TABLE `users` ADD COLUMN `is_admin` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0'; 字段添加到users表并手动管理。

// 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,
));

使用Tank_Auth目前的方式,您将从会话中读取用户数据,因此您必须在登录时将其添加到会话中。

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()

然后让管理员控制器始终检查{{1}}。

这是我可以为实现目标而提供的最短路线 - 可能不是最佳,但您可能对处理用户的current default setup感兴趣默认情况下分组。