Codeigniter管理员和用户角色

时间:2016-10-06 11:23:26

标签: php sql database codeigniter roles

我正在创建一个具有2个角色的登录系统,一个用于'admin',另一个用于'user'。我试着为登录做一个else if语句。这对于用户登录实际上现在发生了什么,现在每个用户都要进入admin_view。

在我的数据库中,该行被称为'admin',这是一个布尔值,因此如果users表中的'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;
    }

}
}

我提供了帮助。

1 个答案:

答案 0 :(得分:0)

首先,你的数组中有一个拼写错误,最后一个不应以;结尾。

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

从那里,您可以检查会话数据admin0还是1

然后你可以这样做:

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