2017-02-08 3 views
0

database.phpでログインしたユーザーの資格情報に基づいて異なるデータベースに動的に切り替えますか?

<?php 
class Database extends CI_Controller { 
    public $branch_db; 

    function __construct($company_name, $branch_name) { 
     parent::__construct(); 
     $branch_db = $this->load->database($company_name.'_db_'.$branch_name); 
    } 
} 
?> 

Account_model.php

protected function verifyLogin($username, $password) { 
    $this->db->trans_start(); 

    $sql = "SELECT password, company_id, branch_id 
       FROM account 
       WHERE username = {$username}"; //Prepare statement 

    $query = $this->db->query($sql); 
    $result_num = $query->num_rows(); 

    if ($result_num == 1) { 
     $first_row = $query->row(); 
     $stored_password = $first_row->password; 

     if (password_verify($password, $stored_password)) { 
      //Successful login 
      //Get company name 
      //Get branch name 
      //Set database 
      //Pass company_name, branch_name 
      //All models must be able to access the dynamically loaded database 
     } 
    } 
    $this->db->trans_complete(); 
} 

アクセスすることができ、複数のデータベースがあります。各ブランチには、動的に作成されたデータベースがあります。各ブランチにはアカウントがあります。アカウントがログインすると、そのアカウントに関連するデータベースにアクセスします。そのデータベースは、ユーザーがログアウトするまでセッション全体に使用されます。

私は有効なユーザー名とパスワードの組み合わせのマスターリストが保存されているメインデータベースを持っています。私はdatabase.phpconfigフォルダに宣言しました。しかし、ユーザーがログインした後、そのユーザーアカウントに関連するデータベースに切り替えて、データにアクセスできるようにする必要があります。

モデルにこのコントローラを使用すると、すべて同じデータベースにアクセスできます($this->load->database()を何度もやり直す必要はありません)。あなたのdatabase.phpでは

+0

手段を?モデルのすべての関数にデータベースをロードしますか? –

+0

ええ、かなり私は推測する?同様に、私はそのようなデータベースを '$ this-> db'と同等にしたいと思います。すべてのモデルにグローバルにアクセスできるようにしてください(各データベースは同じテーブル構造を持っています)@JayminsFakeAccount – herondale

答えて

0

Application->config->database.php 私はそれがログインしてセッションを作成し、admin_type変数を保存することを期待しています。

$admin_type = $this->session->userdata['admin_type']; 
$active_group = 'default'; 
$query_builder = TRUE; 
if ($admin_type==1) { 
    $db['default'] = array(
     'dsn' => '', 
     'hostname' => 'localhost', 
     'username' => 'root', 
     'password' => 'root', 
     'database' => 'name_db', 
     'dbdriver' => 'mysqli', 
     'dbprefix' => '', 
     'pconnect' => FALSE, 
     'db_debug' => (ENVIRONMENT !== 'production'), 
     'cache_on' => FALSE, 
     'cachedir' => '', 
     'char_set' => 'utf8', 
     'dbcollat' => 'utf8_general_ci', 
     'swap_pre' => '', 
     'encrypt' => FALSE, 
     'compress' => FALSE, 
     'stricton' => FALSE, 
     'failover' => array(), 
     'save_queries' => TRUE 
    ); 
}else{ 
    $db['default'] = array(
     'dsn' => '', 
     'hostname' => 'localhost', 
     'username' => 'root', 
     'password' => 'root', 
     'database' => 'name_db2', 
     'dbdriver' => 'mysqli', 
     'dbprefix' => '', 
     'pconnect' => FALSE, 
     'db_debug' => (ENVIRONMENT !== 'production'), 
     'cache_on' => FALSE, 
     'cachedir' => '', 
     'char_set' => 'utf8', 
     'dbcollat' => 'utf8_general_ci', 
     'swap_pre' => '', 
     'encrypt' => FALSE, 
     'compress' => FALSE, 
     'stricton' => FALSE, 
     'failover' => array(), 
     'save_queries' => TRUE 
    ); 
} 
+0

アクセスできるデータベースは複数あります。ユーザーの支店と会社に基づいてログインした後、代わりに特定のデータベースにアクセスします。どうやってやるの?私のモデルで '$ this-> load-> database()'を何度も繰り返す必要はありませんか? – herondale

+0

私はログイン後、リンクの変更があまりにも正しいと思いますか?あなたがコードを編集しても同じコードを編集させることができるのです。 –

+0

あなたが見ることができ、あなたの要求に合うコードを編集しました –

関連する問題