2014-11-24 78 views
0

我有兩個角色,管理員和老師。管理員和教師帳戶可以登錄,但是當我登錄教師帳戶時,它將重定向到管理頁面。我不知道我的代碼是否正確。我是使用codeigniter的新手,所以請耐心等待。在codeigniter中管理兩個角色

因此,這裏是我的控制器:

public function login_validation(){ 

    $this->load->library('form_validation'); 


    $this->form_validation->set_rules('idnum', 'ID Number', 'required|trim|xss_clean|callback_validate_credentials'); 
    $this->form_validation->set_rules('password', 'Password', 'required|md5|trim'); 

    if ($this->form_validation->run()){ 
    //$this->load->model('model_users'); 
    $this->load->model('model_role'); 
    $data = array(
      'login_id' => $this->input->post('idnum'), 
      'is_logged_in' => 1, 
      'role' => $this->model_role->scalar('user_account','role') 

     ); 

    $this->session->set_userdata($data); 
    redirect('site/members'); 
    } else { 
    $data['title'] = "Outcome-based Education"; 

    $this->load->view("index/header", $data); 
    $this->load->view("index/view_home"); 
    $this->load->view("index/footer"); 
    } 
} 

public function members(){ 

    if($this->session->userdata('is_logged_in') && $this->session->userdata('role', 'admin')){ 
    $this->load->view('login/admin'); 
    } elseif($this->session->userdata('is_logged_in') && $this->session->userdata('role', 'teacher')){ 
    $this->load->view('login/members'); 
    } 

    else{ 
    redirect('site/restricted'); 
    } 
} 

這是我的模型:

public function can_log_in(){ 

     $this->db->where('login_id', $this->input->post('idnum')); 
     $this->db->where('password', md5($this->input->post('password'))); 

     $query = $this->db->get('user_account'); 

     if($query->num_rows() == 1){ 
      return true; 
     } else{ 
      return false; 
     } 
    } 
+0

那麼,你的問題是什麼? :) – 2014-11-24 09:10:40

回答

0

在您的成員函數中,您實際上並未檢查角色會話數據的值,只是檢查它是否存在。您需要更改:

if($this->session->userdata('is_logged_in') && $this->session->userdata('role', 'admin')){ 

到:

if($this->session->userdata('is_logged_in') && $this->session->userdata('role') == 'admin'){ 

正如你所看到的,只有1可以傳遞到$這 - >會話級>用戶數據()函數的參數:

/** 
* Fetch a specific item from the session array 
* 
* @access public 
* @param string 
* @return string 
*/ 
function userdata($item) 
{ 
    return (! isset($this->userdata[$item])) ? FALSE : $this->userdata[$item]; 
} 
+0

感謝您的回覆。你回答的那個實際上工作。再次感謝。 – 2014-11-24 15:10:19

0
當你進行登錄操作

,從那裏您呼叫can_log_in()模型的方法,即使你加載該模型,但你只調用$ this-> model_role->標量('user_account','角色')方法,你只給「admin」參數結果作爲響應。