Frage

Ich arbeite für eine Abteilung einer Universität, die verwendet CAS Um eine Einzelsignal-Authentifizierung bereitzustellen und eine CakePHP-Anwendung zu schreiben, die diesen CAS-Service verwenden muss. Ich muss Code schreiben, das:

  • Überprüft mit dem CAS -Server, ob der Benutzer angemeldet ist
  • Zieht einige Anmeldeinformationen vom Server, wenn ja
  • Überprüft die Anmeldeinformationen mit einer internen ACL, da die Personenmenge, die auf die Anwendung zugreifen können, eine Teilmenge des Satzes ist, die sich in den CAS -Dienst anmelden kann.
  • Bietet einen Mechanismus für Administratorbenutzer, entweder durch das Erstellen von speziellen Administratorbenutzern außerhalb des CAS -Systems (mit allen Kopfschmerzen) oder durch die Werbung für bestimmte CAS -Benutzer (mit den unterschiedlichen Kopfschmerzen).

Als relativer Neuling von CakePHP habe ich häufig Probleme, Code zu kleben, der "nicht gehört". Das Beste, was ich mir vorstellen kann, ist, dass dieser Code in die Vorfilter -Methode des App -Controllers gehen sollte, aber ich frage mich, ist dies der beste Ort dafür? Ist es auch zu niedrig im Stapel, um das Admin -Routing zu nutzen?

Zuletzt weiß ich, dass CakePHP sowohl Auth- als auch ACL -Komponenten bereitstellt, aber als ich sie mit ihnen untersuchte, schienen sie nicht für die Vernetzung mit externen Authentifizierungsdiensten zugänglich zu sein. Bin ich falsch und würde beide gut zu dem passen, was ich tun muss?

Vielen Dank!

War es hilfreich?

Lösung

Wenn Sie sich den Kuchen ansehen Kernkomponenten Sie können sehen, dass Ihre CAS -Anforderung zu der Art der Dinge passt, für die Komponenten normalerweise verwendet werden (dh Auth/Session).

Ich würde empfehlen, eine zu erstellen CasAuthComponent. Es gibt einige Informationen darüber sich erweitern AuthComponent, in einer früheren Antwort von mir, die sich als nützlich erweisen kann, wenn Sie auf dem vorhandenen Kern aufbauen möchten AuthComponent.

Eine Komponente (im Wesentlichen wiederverwendbarer Controller -Code) kann mit Modellen interagieren, andere Komponenten (z. B. Sitzung) und den Benutzerfluss (z.

Beachten Sie, dass der Kern der Kern AuthComponent Ruft tatsächlich Informationen aus einem Modell ab (das Benutzermodell standardmäßig), sodass Sie etwas Ähnliches tun können.

Das CasAuthComponent Sie erstellen könnten $use ein externes Benutzermodell (CasUser vielleicht), was für CRUD -Operationen für die Daten verantwortlich ist (hauptsächlich Benutzer abrufen).

Sie können diesen einen Schritt weiter und abstrakte CAS -Interaktionen in eine von diesem Modell verwendete Datenquelle gehen, aber es ist nicht streng unternommen, wenn Sie nicht planen, den Code in anderen Modellen wiederzuverwenden.

Das Endergebnis könnte in ein Plugin verpackt werden:

  • CasAuthComponent (app/plugins/cas/controllers/components/cas_auth.php)
  • CasUser (app/plugins/cas/models/cas_user.php)
  • CasSource (app/plugins/cas/models/datasources/cas_source.php) [Optional

Und wird in Ihrer Anwendung verwendet, indem Sie Folgendes in Ihr App_Controller einfügen:

public $components = array('Cas.CasAuthComponent');

Wenn Sie die Benutzer von Kuchen verwalten möchten, können Sie auch einen Controller und Ansichten in Ihr Plugin einfügen, mit denen der Benutzer mit dem interagieren kann CasUser Modell (dh. $this->CasUser->save()).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top