Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] LogIn bei MVC

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Zitat von Koala Beitrag anzeigen
    im Router hat doch niemand gesagt.
    Wenn ich eine eigene Klasse entwickle, die eine Überprüfung durchführt, wo platziere ich diese dann am geschicktesten? Sollte ohne Zugriff die bestimmten Controller erst gar nicht geladen werden, oder sollen die Controller selber prüfen, ob ein Zugriff erlaubt ist?

    Kommentar


    • #17
      Schau dir doch mal nen paar MVC Frameworks an wie die das gelöst haben. Wir würden dir auch nicht viel anderes hier erzählen.

      Kommentar


      • #18
        Hab jetzt nicht alles durchgelesen, aber:
        Die Session-Variablen sind doch superglobal,
        Du kannst in jeder Klasse prüfen ob eingeloggt oder nicht.
        Würde ich nicht machen. Schaffe ein eigenes Auth-Objekt mit sauberen Schnittstellen, das Du bei Bedarf an die View oder den Controller durchreichst. Damit bleibst Du flexibel für den Austausch von Userrechten oder Auth-Vorgang, aber auch was die Schlüssel-Konventionen in der Session angeht (eine Abhängigkeit im Auth-Objekt, statt vieler bei jeder Session-Array-Abfrage).
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #19
          Hätte dir da 2 Ansätze:

          PHP-Code:
          <?php

          class Controller_Admin extends Controller
          {
              
              public function 
          action_index()
              {
                  if (!
          Auth::instance()->has_right('access_backend')) {
                      
          Request::redirect('admin/login');
                  }
                  
                  
          //...
              
          }
              
              public function 
          action_create_user()
              {
                  if (!
          Auth::instance()->has_right('create_user')) {
                      
          Request::redirect('error');
                  }
                  
                  
          //...
              
          }
              
          }
          und...

          PHP-Code:
          <?php

          class Controller_Admin extends Controller
          {
              
              
          $_access = array(
                  
          'action_index' => array('admin''editor'),
                  
          'action_create_user' => array('admin'),
              );
              
              public function 
          action_index()
              {
                  
          //...
              
          }
              
              public function 
          action_create_user()
              {
                  
          //...
              
          }
              
          }
          Beim ersten Ansatz hast du einfach dein Auth-Objekt mit dem du abfragst ob der User das machen darf. Das hat den Vorteil dass du in Methoden auch einzelne Dinge mit Rechten versehen kannst, als schlechtes Beispiel soll ein Redaktor Beiträge schreiben dürfen aber nicht veröffentlichen.

          Beim zweiten Ansatz bist du etwas weniger flexibel, du kannst die Rechte in den Controllern etwas schöner festlegen. Das ganze ist Rollen basiert, d.h. die Methode wird nur ausgeführt wenn der eingeloggte Benutzer die benötigte Rolle hat, im Code-Beispiel admin oder editor.
          Das ganze kann natürlich auch für Rechte so umgesetzt werden.
          Programming today is a race between developers striving to build better idiot-proof programs, and the universe trying to produce better idiots. So far, the universe is winning.

          Kommentar

          Lädt...
          X