【问题标题】:Codeigniter admin and user roleCodeigniter 管理员和用户角色
【发布时间】:2017-02-15 02:55:12
【问题描述】:

我正在制作一个具有 2 个角色的登录系统,一个用于“管理员”,一个用于“用户”。我试图为登录创建一个 else if 语句。这对于用户登录实际上会发生什么,因为每个用户现在都将访问 admin_view。

在我的数据库中,该行称为“admin”,它是一个布尔值,因此如果用户表中的“admin”列为 1。如果值为 0,则应加载 admin_view,需要加载 user_view。

我现在真的不知道该怎么办。

如何区分管理员和用户的角色?

这是我的控制器:users.php

public function login() {
    $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[3]');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[3]');
    $this->form_validation->set_rules('confirm_password', 'Confirm Password', 'trim|required|min_length[3]|matches[password]');

    if ($this->form_validation->run() == FALSE) {
        $data = array(
            'errors' => validation_errors()
            );

        $this->session->set_flashdata($data);

        redirect('home');
    } else {
        $username = $this->input->post('username');
        $password = $this->input->post('password');
        $user_id = $this->user_model->login_user($username, $password);

        if($user_id) {
            $user_data = array(
                'user_id'   => $user_id,
                'username'  => $username,
                'logged_in' => true
                'admin' => 1;
                );

            $this->session->set_userdata($user_data);
            $this->session->set_flashdata('login_success', 'You are now logged in');
            $data['main_view'] = "admin_view";
            $this->load->view('layouts/main', $data);

        } 
        // Here I want the user_view to load op if the user haa a 0 value in 
in the column admin.
        else if($user_id) {
            $user_data = array(
                'user_id'   => $user_id,
                'username'  => $username,
                'logged_in' => true,
                'admin'     => 0;
                );

            $this->session->set_userdata($user_data);
            $this->session->set_flashdata('login_success', 'You are now logged in');
            $data['main_view'] = "user_view";
            $this->load->view('layouts/main', $data);

        } else {
            $this->session->set_flashdata('login_failed', 'Sorry, you are not logged in');
            redirect('home/index');
        }
    }
}

这是我的模型:user_model.php

public function login_user($username, $password) {
    $this->db->where('username', $username);
    $result = $this->db->get('users');
    $db_password = $result->row(2)->password;
    $admin = $result->row(7)->admin;

    if(password_verify($password, $db_password)) {
        return $result->row(0)->id;
    } else {
        return false;
    }

}
}

感谢您的帮助。

【问题讨论】:

  • login_user 输出什么??

标签: php sql database codeigniter roles


【解决方案1】:

首先,您的数组中有错字,最后一个不应以 ; 结尾。

在您的user_model 中,不要返回 ID,而是返回更多信息。

例如:

return $result->row(0); 

然后,当你回到你的控制器时,你可以这样做

$data = $this->user_model->login_user($username, $password);

array(
  'user_id'   => $data->id,
  'username'  => $username,
  'logged_in' => true,
  'admin'     => $data->admin
);

从那里,您可以检查会话数据是否admin01

那么你可以这样做:

if ($admin == 0) {
  //send to wherever
} else {
  //send some place else
}

【讨论】:

  • 它不起作用,它只将我的用户读取为 0,但在数据库中,我为该用户配置了 'admin' 列为 1,但现在它正在捕获 0。
猜你喜欢
  • 2018-07-02
  • 1970-01-01
  • 2017-11-19
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 2016-01-24
相关资源
最近更新 更多