php - 仅限管理员用户的 CodeIgniter 限制页面

标签 php codeigniter authentication

我正在将 Code Igniter 用于 Web 项目。

我有两个不同的用户,一个基本用户和一个管理员用户。

我通过在我的数据库中有一个名为 admin 的列来区分管理员用户和基本用户,该列等于"is"或“否”

我有两个 Controller ,一个 Controller 纯粹用于登录身份验证 (login.php),另一个用于网页管理等 (site.php)。

我想让页面只对管理员用户可用。这是我的登录 Controller 中的代码片段,它目前在成功登录后重定向我的用户以及设置 session 数据..

   if ($this->input->post('btn_login') == "Login")
   {
        //check if username and password is correct
        $usr_result = $this->login_model->get_user($username, $password);
        if ($usr_result) //active user record is present
        {
             //set the session variables
             $sessiondata = array(
                  'username' => $username,
                  'loginuser' => TRUE
             );
             $this->session->set_userdata($sessiondata);
             if($usr_result->admin == 'Yes')
                  redirect("site/admin");
             else
                  redirect("site/agent");
        }

这是我的主 Controller 的一个片段,它管理我的页面等 (site.php):

public function admin(){
        $data["title"]="My Admin";
        $this->load->model("notifications");

        if ($this->session->userdata('loginuser')){
            $this->load->view("site_header");
            $this->load->view("site_nav");
            $this->load->view('adminpage', $data);
            $this->load->view("site_footer");
        } else {
            redirect('site/restricted');
        }
    }

    public function restricted(){
        $this->load->view("restricted");
    }

现在你可以从我上面的方法 admin() 代码片段中看到,我有一个 if 语句只允许登录用户登录到这个页面,否则显示受限页面。

我如何更改此代码以仅允许具有列 admin = Yes 的用户访问此页面?由于目前我的所有用户管理员或非管理员都可以访问此页面。

我希望这是有道理的,提前谢谢你!

最佳答案

在你的登录函数中:

//set the session variables
$sessiondata = array('user' => $usr_result); //This you'll be able to access all your user info at anytime.
$this->session->set_userdata($sessiondata);

在你的主 Controller 中:

if ($this->session->userdata('user') && $this->session->userdata('user')->is_admin == "Yes")

或者,更具可读性:

$myUser = $this->session->userdata('user');
if ($myUser && $myUser->is_admin == "Yes")

您不需要设置 'loginuser' => TRUE。如果有 session ,那是因为你的用户已经登录了。所以你只需要检查 session 是否设置,就可以知道你的用户是否登录了。

关于php - 仅限管理员用户的 CodeIgniter 限制页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28465009/

相关文章:

php - INSERT 查询根本不添加

mysql - 用户和 access_tokens 的 CodeIgnither OAuth 2.0 数据库设置

session - Dart 中有类似 session 的东西吗?

python - Django 登录无法正常工作

PHP session 注销错误

javascript - 在 PHP 中提取缩略图

php - Phalcon PHP 调度程序转发不起作用

php - 使用 SQL、PHP 或 JS 解码通过 ws_concat(mysql) 连接的两个 JSON 字符串

php - 带有 CI 的原生 cURL

php - 如何在 codeIgniter 中对文件使用分页