Authentikation und Authorisation

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

  • Authentikation und Authorisation

    Hi!

    Schreibe gerade an einer Authentikation und Authorisationsklasse (Auth) für mein Basisframework.

    Die Klasse enthält eine Methode isPermitted() welche von mehreren Klassen, die von Auth erben, aufgerufen wird. Die Funktion dient dazu einen Wert aus einer Tabelle zu lesen, welcher die weitere Ausführung des aufrufenden (Kind)-Scripts zulässt oder eben verweigert.

    Für jede Klasse, die isPermitted() aufruft hab ich eine eigene Tabelle angelegt, z.B. für die Klasse Foo_Bar existiert die Tabelle foo_bar mit einer Rechtematrix (in den Spalten stehen die Funktionsnamen der Klasse, die Zeilen symbolisieren unterschiedliche Rollen).

    Innerhalb der Klasse Foo_Bar könnte der Konstruktor also wie folgt aussehen:

    PHP-Code:
    class Foo_Bar extends Auth
    {
        public function 
    __construct()
        {
            if(
    $this->isPermitted()) {
                
    // Programm wird fortgesetzt
            
    } else {
                
    // Programm mit einer Fehlermeldung, die auf die benötigten 
                // Rechte hinweist, abbrechen
            
    }
        }

    Damit ich nicht für jede Klasse ein eigenes SQL-Statement basteln muss, mit dessen Hilfe ich mir den Rechtevektor aus der DB hole, hab ich mir überlegt, ob man das nicht automatisieren könnte.

    Meine Frage nun: Gibt es eine Funktion, die es erlaubt den Namen einer Klasse festzustellen, die eine bestimmte Funktion aufruft?

    Die Funktion Auth#isPermitted() soll also Foo_Bar ausgeben, wenn der Konstructor w.o. gezeigt abgearbeitet wird.

    TIA


    PS: Über alternative Varianten, wie eine solche Klasse aussehen könnte würde ich mich freuen.
    Zuletzt geändert von php_rookie; 23.03.2006, 14:42.

  • #2
    PHP-Code:
    get_class($this
    liefert dir den Namen der attsächlich verwendeten Klasse.

    Warum verwendest du für jede Klasse eine eigene Tabelle?

    Wenn die Tabellenstruktur immer gleich ist:
    Nehme meinetwegen den Klassennamen in den Primärschlüssel der Tabelle auf und arbeite nur mit einer Tabelle.


    Wenn die Tabellenstruktu rimmer unterschiedlich ist:
    Wie unterscheiden sich die Strukturen?
    Warum?
    Wenn es denn sein muss (noch glaube ich es nicht):
     Warum implementierst du die Methode in deinen abgeleiteten Klassen nicht neu?
     Warum hast du deine Superklasse nicht als Interface entwickelt?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      perfekt, danke!

      Die Funktion schaut nun so aus:
      PHP-Code:
          protected function isPermitted()
          {
              if (
      $result preg_split("/_/"strtolower(get_class($this)))) {
                  if (
      sizeof($result) === 2) {
                      
      $table  $result[0] . "_rights"// Tabellenname
                      
      $column $result[1];             // Spaltenname

                      // Rechte auslesen und zurückgeben
                  
      }
              }
              
              
      // Sollte nie erreicht werden...       
              
      return false;
          } 
      Warum verwendest du für jede Klasse eine eigene Tabelle?
      Da hab ich mich verschrieben, sorry. Gemeint war: Für jedes Modul existiert eine Tabelle und für jede Klasse eine Spalte (mit dem selben Namen wie die Klasse).

      Die Tabellenstruktur ist nicht für jedes Modul gleich. Ein Modul kann beispielsweise aus n oder m Klassen bestehen und für jede Klasse gibt es eine Spalte in der zugehörigen Rechte-Tabelle.

      Im moment hab ich eine abstrakte Methode, die ich in jeder Klasse neu implementiere. Das wollte ich automatisieren und das hab ich dank deines Tipps nun geschafft.

      Bleibt nur noch zu überlegen, ob man diese "Sicherheitsfunktion" irgendwie umgehen kann...
      Zuletzt geändert von php_rookie; 23.03.2006, 15:27.

      Kommentar


      • #4
        Und warum hast du nicht eine Tabelle bestehend aus:
        - Modulname und Klassenname als Primärschlüssel
        - Zu prüfende Aktion
        - Kennzeichen, ob Aktion erlaubt ist oder nicht
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar

        Lädt...
        X