2016-10-06 1 views
-1

Je crée un système de connexion avec 2 rôles un pour 'admin' et un pour 'user'. J'ai essayé de faire une déclaration else if pour la connexion. C'est ce qui se passe pour l'utilisateur, maintenant que tous les utilisateurs vont à l'admin_view en ce moment.Administrateur Codeigniter et rôle utilisateur

Dans ma base de données, la ligne est appelée 'admin', qui est un booléen, donc si la colonne 'admin' est 1 dans la table des utilisateurs. La vue admin_view doit être chargée si la valeur est 0, la vue utilisateur doit être chargée.

Je ne sais vraiment pas quoi faire maintenant.

Comment dois-je séparer les rôles entre l'administrateur et l'utilisateur?

Voici mon contrôleur: 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'); 
     } 
    } 
} 

Voici mon modèle: 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; 
    } 

} 
} 

J'apperciate l'aide.

+0

'ce login_user' Sorties ?? –

Répondre

0

Tout d'abord, il y a une faute de frappe dans votre tableau, le dernier ne devrait pas se terminer par ;.

Dans votre user_model, au lieu de renvoyer l'ID, renvoyez un peu plus d'informations.

par exemple:

return $result->row(0); 

Puis, quand vous revenez à votre contrôleur, vous pouvez faire

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

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

À partir de là, vous pouvez vérifier les données de session si admin est 0 ou 1.

Ensuite, vous pouvez faire:

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

Cela ne fonctionne pas, il lit seulement mon utilisateur comme 0, mais dans la base de données, j'ai configuré la colonne 'admin' à un pour cet utilisateur, mais il attrape 0 maintenant. – CodeboyCap