CakePHP & DIEVOLUTION Blog

CakePHP: Authorisation

 

Problemhilfe am Samstag!

Viele von euch werden das Problem kennen. Man hat eine schöne Applikation erstellt und möchte nun bestimmte Bereiche nur für bestimmte Benutzergruppen zugänglich machen. Zu diesem Zweck möchte ich euch als kleine Hilfe eine Auth-Funktion zeigen, die Controller “sichert”.

Zu diesem Zweck gibt es eine DB Tabelle, in der verschiedene Status-Zustände gespeichert sind, die jeweils mehr Möglichkeiten bekommen sollen:

  • 0 - Gast, keinerlei Rechte
  • 1 - Angemeldeter User, Grundrechte, bsp. Posten im Forum
  • 10 - Premiumnutzer mit Sonderrechten
  • 100 - Administrator

Dies funktioniert für kleinere Seiten sehr gut, da meist nicht mehr als 3-5 Userzustände möglich sind. Nun kann man genau einstellen, wer welche Funktion im Controller ausführen darf, und das geht so:

Kopiere diese Funktion in [root]/[app]/app_controller.php

  1. function auth($level, $debug = 0) {
  2.         $status = $this->Session->read(“User.Status”);
  3.         if ($debug == 1)echo “Authenticitaion: “.$level.” >= “.$status[‘id’];
  4.         if ($status[‘id’] < $level) {
  5.             $this->Session->setFlash(“Fehlende Berechtigung”);
  6.                   $this->redirect($this->referer());
  7.         } else {
  8.             return true;
  9.         }
  10.     }

Der Status des Users ist in der Session User.Status gespeichert. (Achtung, nur verwenden wenn die Sessions auf dem Server verbleiben, bei Cookie Sessions unbedingt neuauslesen aus Datenbank).
Will man jetzt prüfen, ob der User Zugang zu einer Controllerfunktion besitzt, schreibt man dies so:

Beliebiger Controller:

  1. function add() {
  2.         $this->auth(1);
  3.  ….
  4. }

Dies bedeutet, dass nur User, deren Status 1 und höher ist, Zugriff auf die Add Funktion bekommen. Alle anderen werden an die vorhergehende Seite

  1. $this->referer();

zurückgeleitet.

Diese Möglichkeit soll nur als Beispiel dienen, wie man einfachen Webseiten die Möglichkeit einer Userkontrolle geben kann. Dieses System kann problemlos erweitert werden, z.B. auf Gruppensysteme.


Veröffentlicht am Samstag, den 26. Mai 2007 um 16:07 Uhr veröffentlicht

Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.

Einen Kommentar schreiben