2016-10-06 3 views
-1

Я создаю систему входа в систему с двумя ролями, один для «admin» и один для «user». Я попытался сделать оператор else if для входа. Это для входа пользователя на самом деле, что происходит сейчас, когда каждый пользователь собирается в admin_view прямо сейчас.Codeigniter admin и user role

В моей базе данных строка называется «admin», которая является логической, поэтому, если столбец «admin» равен 1 в таблице users. Admin_view должен быть загружен, если значение равно 0, необходимо загрузить 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; 
    } 

} 
} 

Я apperciate помощь.

+0

что 'login_user' выходы ?? –

ответ

0

Во-первых, в вашем массиве есть опечатка, последняя не должна заканчиваться ;.

В своем user_model вместо возврата идентификатора верните дополнительную информацию.

например:

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

Оттуда вы можете проверить в данном сеансе ли admin является 0 или 1.

Тогда вы можете сделать:

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

Он не работает, он читает только моего пользователя как 0, но в базе данных я сконфигурировал столбец «admin» для одного для этого пользователя, но теперь он ловит 0. – CodeboyCap

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