2015-07-07 4 views
17

Ich möchte, dass der Benutzer nicht auf bestimmte Methoden des Controllers zugreift, wenn die Sitzung nicht eingestellt ist. Dafür kann ich die Sitzung in allen Methoden überprüfen und wenn die Sitzung eingestellt ist, dann gehe nur weiter zum anderen Redirect auf bestimmte Seite. Da ich viele Methoden habe, möchte ich nicht, dass der Benutzer Zugriff nimmt, wenn die Sitzung nicht eingestellt ist. Seine Masse, um alle Methoden zu durchlaufen und Sitzung zu überprüfen. Gibt es eine Abkürzung, um diese Funktionalität zu erhalten?Kein Zugriff auf bestimmte Methoden im Controller, wenn die Sitzung nicht im Codegeigner eingestellt ist

Ich versuchte zu überprüfen Sitzung ist Konstruktor Methode des Controllers, aber es funktioniert für alle Methoden. Aber ich möchte nur bestimmte Methode zu blockieren, wenn Sitzung nicht festgelegt ist. Wie es geht.

Beispiel:

class dashboard extends CI_Controller { 

function __construct() { 
    parent::__construct(); 
    $this->load->library('session'); 
    $this->load->model('dbmodel'); 
    $this->load->helper('url','form'); 


    //verified user check 
    if($this->session->userdata("unverified") != FALSE) { 
     redirect("verify_user"); 

    } 

    } 
    //verified user check 
} 

Above Code, leitet Controller verify_user sobald 'ungeprüfte' Sitzung gefunden wird, wenn Benutzer auf Armaturensteuerung gehen. Aber ich möchte Zugang zu einer Methode des Dashboard-Controllers geben. Nicht alle Methoden. Wo dieser Code umleitet, wenn eine Sitzung gefunden wird und keinen Zugriff auf eine Methode des Dashboard-Controllers gewährt.

+0

fügen Sie einen Code hinzu, der Ihre Frage betrifft –

+0

Ich habe einen Code hinzugefügt, der sich auf meine Frage bezieht – user254153

+0

Welche Version von CI verwenden Sie ??? – Saty

Antwort

13

prüfen dies Es könnte Sie

  1. Nur param

    class MY_controller extends CI_controller{ 
        function __construct() { 
         parent::__construct(); 
        } 
        function _required_user($params =array()){ 
         $action =$this->router->fetch_method(); 
         if(empty($params['except'])) 
          $params['except'] =array(); 
         if(empty($params['only'])) 
          $params['only'] =array(); 
         if(count($params['except']) > 0 && in_array($action,$params['except'])) 
          return true;  
         if(count($params['only']) > 0 && in_array($action,$params['only']) && $this->session->userdata('is_login')) 
          return true; 
         if($this->session->userdata('is_login'))  
          return true; 
         redirect('login'); 
    
        }  
    } 
    
    class dashboard extends MY_Controller { 
    
        function __construct() { 
         parent::__construct(); 
         $this->load->library('session'); 
         $this->load->model('dbmodel'); 
         $this->load->helper('url','form'); 
         $this->_required_user(array('except'=>array('index')))  
        } 
        function add(){ 
        /* 
        Session required 
        */ 
        } 
        function edit(){ 
        /* 
        Session required 
        */ 
        } 
        function index(){ 
        /* 
        no session required 
        */ 
        } 
        } 
    
    class content extends MY_Controller{ 
        function __construct() { 
         parent::__construct(); 
         $this->load->library('session'); 
         $this->load->model('dbmodel'); 
         $this->load->helper('url','form'); 
         $this->_required_user(array('only'=>array('index')))   
        } 
        function add(){ 
        /* 
        no Session required 
        */ 
        } 
        function edit(){ 
        /* 
        no Session required 
        */ 
        } 
        function index(){ 
        /* 
        session required 
        */ 
        } 
    } 
    class Myaccount extends MY_Controller{ 
        function __construct() { 
         parent::__construct(); 
         /* 
         for all functions session required 
         */ 
         $this->_required_user()  
    
        } 
        function edit(){ 
        /* 
        session required 
        */ 
        } 
        function save(){ 
        /* 
        session required 
        */ 
        } 
    } 
    
    helfen: Check-Sitzung wird nur gegeben Funktionen existieren/Funktion
  2. Ausgenommen param: Sitzung für gegebene Funktionen/Funktion nicht überprüfen
  3. Nein Param: Sitzung für alle Funktionen im Controller überprüfen und umleiten

können Sie modifizierte _reuired_user Funktion entsprechend Ihrer Anforderung

+0

Ich habe obigen Code geschrieben. Und dann kann ich auch auf die Methode wie Hinzufügen ohne Sitzung zugreifen. Auch nach dem Senden des Formulars wird ein neuer Tab geöffnet. – user254153

+0

Ich muss Code mit meiner Anforderung ändern und es hat erfolgreich funktioniert. Vielen Dank. – user254153

+0

Gern geschehen! Freut mich zu hören, dass es geklappt hat! Können Sie mitteilen, welche Änderungen Sie vorgenommen haben? – shafiq

4

Sie können versuchen, die folgenden - wenn es

hilft

in Ihrer Anwendung/Kern Ordner erstellen eine Klasse namens MY_Controller so etwas wie

class MY_Controller extends CI_Controller 
{ 

    public function checkUserSession() 
    { 
     if($this->session->userdata("unverified") != FALSE) 
     { 
      redirect("verify_user"); 
     } 
     return true; 
    } 

} 

danach Armaturenbrett Controller wie

aussehen sollte
class dashboard extends MY_Controller 
{ 
    public function show_dashboard() 
    { 
     if ($this->checkUserSession()) 
     { 
      //your code 
     } 
    } 
} 
+0

Diese Methode ist lang, wenn ich viele Methoden habe, die bereits gemacht sind. Ich möchte nicht jedes Mal Methoden durchgehen und die Sitzung überprüfen. Ich möchte die Sitzung nur in bestimmten Methoden überprüfen. – user254153

+0

verstehe nicht, was Sie meinen - weil mein Vorschlag genau das tut, was Sie wollen - schreiben Sie einfach in jede Methode, in der Sie die Sitzung überprüfen wollen 'if ($ this-> checkUserSession()) {....} und das ist es – sintakonte

+0

Ich würde nicht in jeder Methode schreiben. Wie in der Frage erwähnt. – user254153

4

Erstellen Sie eine Bibliothek mit einem beliebigen Namen, den ich erstellt habe.

class Users 
{ 
    public function __construct() 
    { 
     $this->ci =& get_instance(); 
    } 

    function _is_logged() 
    { 
     if(!$this->ci->session->has_userdata('unverified')) 
     { 
      redirect('verify_user'); 
     } 
    } 
} 

Laden Sie die Bibliothek oder in application/config/autoload.php in automatisch zu laden setzen

Dann rufen Sie einfach die Funktion an der Spitze Ihrer Methoden, die man Sie einschränken möchten.

function abc() 
{ 
    $this->users->_is_logged(); 
    // your code 
} 
1

Kontroller

<?php 
    class dashboard extends CI_Controller { 

     function __construct() 
     { 
      parent::__construct(); 
      $this->load->library('session'); 
      $this->load->model('dbmodel'); 
      $this->load->helper('url','form'); 


     } 

     public function index() 
     { 
      $user = $this->session->userdata("unverified")//asign session value to variauble 
      $result = $this->dbmodel->check_user($user);//check user validity 

     if(empty($result)) 
     { 
      //user is not verified 
      $this->load->view('unverified_loging'); 
     } 
     else 
     { 
      //user is verified 
      $this->load->view('verified_loging'); 
     } 

    } 

In Modell

public function check_user($user) 
    { 
     $query = $this->db->query("SELECT * FROM user WHERE <argument here>");//check with database 
     $result = $query->result_array(); 
     return $result; 

    } 

Wenn der Benutzer ist zufrieden mit dem validity Benutzer dann geben sie die Daten an $result. Andernfalls, wenn nicht mit der validity zufrieden stellend, wird $result als NULL zurückgegeben.

So in der Steuerung können Sie überprüfen, ob $result seine leer oder nicht

4

können Sie wie folgt überprüfen? Diese

function __construct() 
{ 
    parent::__construct(); 
} 

function chk_login() 
{ 
    if($this->session->userdata('logged_in')) 
    { 
     echo "some action"; 
    } 
    else 
    { 
     redirect('login'); 
    } 
} 
+0

Bitte lesen Sie die Frage schön. – user254153

4

ist keine Antwort, sondern Vorschlag basiert auf meiner Erfahrung:

Als Entwickler ist es einfach, wenn es wie die oben erwähnte Antwort von @ user1048123 erfolgt.

Wenn Sie jedoch auf die Methode (ex: index) zugreifen, für die keine Sitzung benötigt wird, muss die Methode function _required_user() verarbeitet werden, bevor der Index angezeigt wird, an dem Sie ein größeres Array übergeben müssen (zB 30 Methoden in Gruppenname). Dadurch wird die Ladezeit von Methoden verlangsamt, für die keine Sitzung benötigt wird. Zur besseren Leistungsprüfung ist die Sitzung die Methode (in jeder Methode), für die eine Sitzung überprüft werden muss.

Diese Idee könnte älter sein, aber es spielt wirklich eine Rolle, wenn Sie eine größere Anzahl an Methoden oder Benutzern haben.

Verwandte Themen