4 Stimmen

CodeIgniter Modell / Controller und UserID

Meine Modelle in CodeIgniter müssen prüfen, ob ein Benutzer berechtigt ist, die angegebene Aktion durchzuführen. Innerhalb der Models habe ich mit $this->session->userdata['user_id'] referenziert.

Meine Frage ist - sollte ich eine Variable auf $this->session->userdata['user_id'] im Controller setzen und diese an das Modell übergeben, oder einfach überprüfen Sie es innerhalb des Modells?

Ist das überhaupt wichtig? Ich nehme an, die Übergabe von $user_id in die Funktion würde sie (etwas) lesbarer machen. Was sind die Argumente und Empfehlungen für / gegen?

6voto

Bruce Alderson Punkte 1507

Sie haben die Wahl zwischen Daten, die für Ihre Anwendung von grundlegender Bedeutung sind, und Daten, die für eine bestimmte Modell-Member-Funktion zufällig sind. Dinge, die Sie überall verwenden, sollten garantiert sein (Basismitglieder, Globals usw.), und Dinge, die nur in der aktuellen Funktion verwendet werden, sollten Parameter sein. Sie werden feststellen, dass die Verwendung implizierter Variablen (wie $this->session->userdata ) an vielen Stellen in Ihren Modellen und Ansichten werden schnell zu Spaghetti und sind unvorhersehbar, wenn Sie sie nicht richtig bootstrappen.

In meinen CodeIgniter-Projekten füge ich ein benutzerdefiniertes Basismodell und einen Controller hinzu, die vom CI-Framework erben und ihre eigenen Mitgliedsdaten hinzufügen, die überall in der Anwendung verwendet werden. Ich verwende diese Basisklassen, um Daten und Funktionen bereitzustellen, die von allen meinen Modellen und Controllern verwendet werden (einschließlich Dingen wie userID ). Im Konstruktor von my_base_controller rufe ich den CI-Basiskonstruktor auf und richte Daten ein, die alle meine Controller und Ansichten benötigen. Dies garantiert vorhersehbare Standardwerte für Klassendaten.

1voto

ekhaled Punkte 2900

Streng genommen $this->session->userdata['user_id'] gehört zum Controller.
Modelle befassen sich nur mit Daten... Controller steuern per Definition den Datenfluss...
und Authentifizierung ist eine Form der Datenkontrolle... (IMHO)

Bei der Codierung gehe ich folgendermaßen vor

class MyControllerName extends Controller{
  function MyMyControllerName(){
    parent::Controller();
    $this->_user_id=$this->session->userdata['user_id']; //<-- define userid as a property of class
  }
}

Und dann, sagen wir eine meiner Funktionen foo() erfordert eine Authentifizierung. Ich würde dies tun

function foo(){
  $this->_checkAuthentication(); //should short out if not authenticated
  //rest of the function logic goes here
}

le site _checkAuthentication() kann so einfach sein wie:

function _checkAuthentication(){
  if(!isset($this->_user_id) && $this->_user_id<=0){ /or any other checks
    header("Location: ".base_url()."location_of/user_not_authorised_page");
    exit;
  }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X