2014-11-24 3 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

Итак, каков ваш вопрос? :) –

ответ

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'){ 

Как вы видите, есть только один параметр, который может быть передан в this-> session-> функции пользовательских данных $():

/** 
* 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

Благодарим вас за ответ. Тот, на который вы отвечали, действительно работал. Еще раз спасибо. –

0

при выполнении входа в действие, откуда вы звоните can_log_in() метод модели, даже при загрузке модель, но вы вызываете только метод $ this-> model_role-> scalar ('user_account', 'role'), который вы даете только параметру «admin».

Смежные вопросы