2016-10-06 2 views
-1

Ich mache ein Login-System mit 2 Rollen eine für 'admin' und eine für 'Benutzer'. Ich habe versucht, eine andere if-Anweisung für das Login zu machen. Dies für den Benutzer-Login tatsächlich, was passiert jetzt, dass jeder Benutzer zur admin_view jetzt geht.Codeigniter Admin und Benutzerrolle

In meiner Datenbank heißt die Zeile 'admin', was ein boolescher Wert ist, wenn die Spalte 'admin' in der Benutzertabelle 1 ist. Die admin_view sollte geladen werden, wenn der Wert 0 ist, muss die user_view geladen werden.

Ich weiß wirklich nicht, was ich jetzt tun soll.

Wie muss ich die Rollen zwischen dem Admin und Benutzer trennen?

Hier ist mein Controller: 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'); 
     } 
    } 
} 

Hier ist mein Modell: 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 ich die Hilfe.

+0

was 'login_user' Ausgänge ?? –

Antwort

0

Zunächst gibt es einen Tippfehler in Ihrem Array, der letzte sollte nicht mit einem ; enden.

Geben Sie in Ihrer user_model anstelle der ID einige weitere Informationen zurück.

zB:

return $result->row(0); 

Dann, wenn Sie zurück zu Ihrem Controller gehen, können Sie tun

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

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

Von dort Sie in den Sitzungsdaten überprüfen können, ob admin0 oder 1 ist.

Dann können Sie tun:

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

Es funktioniert nicht, es liest nur meinen Benutzer als 0, aber in der Datenbank habe ich die 'admin' Spalte auf eine für diesen Benutzer konfiguriert, aber es fängt jetzt 0. – CodeboyCap

Verwandte Themen