2017-02-08 1 views
0

database.phpdynamischer Wechsel zu einer anderen Datenbank basierend auf den Anmeldeinformationen des angemeldeten Benutzers?

<?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(); 
} 

Es gibt mehrere Datenbanken, auf die zugegriffen werden kann. Für jeden Zweig gibt es eine dynamisch erstellte Datenbank. Jede Filiale hat ein Konto. Wenn ein Konto angemeldet ist, wird auf die Datenbank zugegriffen, die mit diesem Konto verknüpft ist. Diese Datenbank wird dann für die gesamte Sitzung verwendet, bis sich der Benutzer abmeldet.

Ich habe eine Hauptdatenbank, wo eine Master-Liste der gültigen Benutzername/Passwort-Kombinationen gespeichert sind. Ich hatte das in meiner database.php in der config Ordner deklariert. Aber nachdem sich der Benutzer anmeldet, muss ich zu der Datenbank wechseln, die zu diesem Benutzerkonto gehört, damit sie auf ihre Daten zugreifen können.

Wie kann ich diesen Controller für meine Modelle verwenden, damit alle auf dieselbe Datenbank zugreifen können (ohne $this->load->database() immer wieder neu erstellen zu müssen)?

+0

bedeutet? Sie möchten die Datenbank für jede Funktion des Modells laden? –

+0

Ja, ziemlich genau, denke ich? Ich möchte diese db gleichbedeutend mit $ this- db machen, global für alle Modelle zugänglich machen (jede Datenbank hat die gleiche Tabellenstruktur) @JayminsFakeAccount – herondale

Antwort

0

in Ihrem database.php Application->config->database.php Ich erwarte, dass Sie eine Sitzung erstellen und admin_type Variable speichern, wie es angemeldet.

$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

Es gibt mehrere Datenbanken, auf die zugegriffen werden kann. Nach der Anmeldung wird basierend auf der Filiale und dem Unternehmen des Benutzers stattdessen auf diese bestimmte Datenbank zugegriffen. Wie kann ich das machen? Ohne $ $ this-> load-> database() 'in meinen Modellen immer und immer wieder machen zu müssen? – herondale

+0

Ich denke, nach dem Login wird es auch Änderungen in den Links geben, oder? Sie können das tun, wenn auch Codierungen den Code für das gleiche bearbeiten lassen. –

+0

Ich habe den Code bearbeitet, den Sie sehen können und kann in Ihre Anforderungen passen –

Verwandte Themen