2017-06-17 13 views
1

管理者がログインしている場合、彼に管理者/ダッシュボードにアクセスします。それ以外の場合はユーザーのダッシュボードに送信します。ログインのコントローラは以下の通りです。ユーザーテーブルでは、私は 'ロール'の列を持ち、値は '1'と '2'です。 1は管理者を表し、2はユーザーを表します。役割のための別のテーブルがあります。コードイグナイターのユーザー役割に基づいてadminとユーザーにリダイレクト

ログインユーザ機能

public function login(){ 
    $data['title'] = 'Login'; 

    //validating form 
    $this->form_validation->set_rules('username', 'Username', 'required'); 

    $this->form_validation->set_rules('password', 'Password', 'required'); 

    if($this->form_validation->run() ===FALSE){ 
     $this->load->view('templates/header'); 
     $this->load->view('users/login', $data); 
     $this->load->view('templates/footer'); 
    }else{ 
     //Get username 
     $username = $this->input->post('username'); 

     //Get password in md5 
     $password= md5($this->input->post('password')); 

     //Login User.... passing username and password 
     $user_id = $this->user_model->login($username, $password); 

     //checking userid 
     if($user_id){ 
      //creating session if user_id is present 
      $user_data=array(
       'user_id'=>$user_id, 
       'username'=>$username, 
       'logged_in' => true 
      ); 

      $this->session->set_userdata($user_data); 
      //set message    
      $this->session->set_flashdata('user_loggedin', 'Login successful'); 
      redirect('posts');     
     }else{ 
      //creating session if user_id is not present 
      $this->session->set_flashdata('login_failed', ' Invalid credentials'); 
      redirect('users/login'); 
     } 
    } 
} 
+0

あなたのlogin()メソッドを見せてください。 – molagbal

+0

ここでuser_roleフィールドはありますか?セッションに入れていませんか? –

+0

この情報は役に立ちましたか?[ここをクリック](https://stackoverflow.com/questions/41529588/what-is-the-best-practice-for-role-based-login-system-in-codeigniter) –

答えて

0

私は、ユーザーの役割に設定されたかを正確に列名を知りません。これはuser_role_idと言って、ここに私の例があります。

//checking userid 
    if($user_id){ 
     //creating session if user_id is present 
     $user_data=array(
      'user_id'=>$user_id, // you should change this variable to $user_id['id'] 
      'username'=>$username, 
      'logged_in' => true 
     ); 

     $this->session->set_userdata($user_data); 
     //set message    
     $this->session->set_flashdata('user_loggedin', 'Login successful'); 
     if($user_id['user_role_id'] == 1){ 
      redirect('admin/dashboard', 'refresh'); 
     } 
     else if($user_id['user_role_id'] == 2){ 
      redirect('users/dashboard', 'refresh'); 
     }     
    }else{ 
     //creating session if user_id is not present 
     $this->session->set_flashdata('login_failed', ' Invalid credentials'); 
     redirect('users/login'); 
    } 
+0

Iあなたが言ったようにしていない........配列として型stdClassのオブジェクトを使用することはできません..........この問題は($ user_id ['user_role_id'] == 1){ リダイレクト( 'admin/dashboard'、 'refresh'); }この部分は –

+0

のモデルを表示してください。 – kazinayem2011

+0

//ファンクションユーザーの資格情報のチェックをログインする \t \tパブリック関数のログイン($ユーザ名、$パスワード){ \t \t \t //は、資格情報は、ユーザー名とパスワード \t \t \tます$ this-> DB->どこ(」検証しますusername '、$ username); \t \t \t $ this-> db-> where( 'password'、$ password); \t \t \t // usersテーブルから結果を取得 \t \t \t $結果=の$ this - > DB-> GET( 'ユーザー'); \t \t \t \t \t \t //ユーザーがデータベースに存在する場合($ result-> NUM_ROWS()== 1){ \t \t \t \tリターン$ result->列場合 \t \t \tをチェックする(0 ) - > userID; \t \t \t} else { \t \t \t \t return false; \t \t \t \t \t} –

0

ユーザーを検証している間は、ログイン呼び出しの応答としてアレイを送信する必要があります。

$user_info = $this->user_model->login($username, $password); // User Info should be an Array $user_info = array('user_id' => '123', 'role' => '1'); if exist and $user_info = array(); if not 


if(isset($user_info['user_id']) && !empty($user_info['user_id'])) { 
$user_data=array(
     'user_id'=>$user_info['user_id'], 
     'username'=>$username, 
     'logged_in' => true 
    ); 

$this->session->set_userdata($user_data); 
$this->session->set_flashdata('user_loggedin', 'Login successful'); 
if($user_info['role'] == 1){ 
    redirect('admin/dashboard'); 
} else { 
    redirect('user/dashboard'); 
} 

} 

確かにこれが役に立ちます。

関連する問題