Verschiedene Bereiche, verschiedene User-Tabellen und verschiedene Logins auf einer Webseite

55 views
Skip to first unread message

Mathias Ratheike

unread,
Oct 23, 2012, 5:00:12 AM10/23/12
to cakep...@googlegroups.com
Hi,

ich plane derzeit ein neues Projekt mit CakePHP, ähnlich einem Shopsystem.

Es soll 4 Gruppen geben, alle von einander getrennt:

Gruppe 1: Käufer
Gruppe 2: Händler
Gruppe 3: Affilate-Partner
(Gruppe 4: Admins wobei ich diese Gruppe wohl mit ACL umsetzen kann)

Jede Gruppe hat ihren eigenen Bereich (z.B. domain.tld/business, domain.tld/partner) und somit ihren eigenen Loginbereich.
Dass ich diese Bereiche mit prefix-routing umsetzen kann, weiss ich. Allerdings stoße ich auf ein Problem:

Dadurch dass nur ein Cookie gesetzt wird, ist jeder Händler der sich einloggt, automatisch auch im Partner-Bereich eingeloggt, ohne da auch nur einen Account zu haben. ($this->Auth->user() == true)
Wie setze ich das nun am Besten um, dass jeder seinen eigenen Login-Bereich hat, ohne auf die anderen Bereiche Zugriff zu haben?
Idealerweise sollte das alles mit einem User-Model umgesetzt werden, denn die Struktur in den Tabellen ähnelt sich stark, allerdings sollten sie nicht zusammengefasst werden,
da es zu Unterschieden kommen kann (Bankdaten etc)

Für einen Fingerzeig in die richtige Richtung wäre ich dankbar.

Gruß
M.

Mark Kessler

unread,
Oct 23, 2012, 7:22:42 AM10/23/12
to cakep...@googlegroups.com
Falls sich die Daten der unterschiedlichen Benutzergruppen nicht zu sehr unterscheiden würde ich trotzdem alles in eine User Tabelle schreiben. Du könntest dann für jede Benutzergruppe ein eigenes Model haben wenn jede Gruppe spezielle Model Funktionen braucht. Dann prüfst du für den Zugriff in den einzelnen Portalen nicht nur ob der User eingeloggt ist sondern auch ob er die passende Rolle hat.
Was du vorhast, ein Model das auf unterschiedliche Tabellen zugreift, geht meines Wissens nicht. Auch kann die Auth Komponente meines Wissens nach nicht mit unterschiedlichen User Modellen arbeiten. Was du aber machen kannst, ist die Auth Komponente erweitern indem du eine eigene Komponente schreibst die von der AuthComponent abgeleitet ist.

2012/10/23 Mathias Ratheike <mat...@mrnetworks.de>

M.

--
Bitte bei Fragen immer auch die aktuell verwendete cakePHP Version angeben und
wenn möglich auch das verwendete Betriebssystem und die PHP Version. Danke.
Sie erhalten diese Nachricht, weil Sie Mitglied sind von Google Groups-Gruppe "CakePHP-de für deutsche CakePHP Entwickler".
Für das Erstellen von Beiträgen in dieser Gruppe senden Sie eine E-Mail
an cakep...@googlegroups.com
Um sich von dieser Gruppe abzumelden, senden Sie eine E-Mail an cakephp-de-...@googlegroups.com
Weitere Optionen finden Sie in dieser Gruppe unter http://groups.google.com/group/cakephp-de?hl=de

Mathias R

unread,
Oct 24, 2012, 6:22:04 AM10/24/12
to cakep...@googlegroups.com
Also ich hab das jetzt hinbekommen, mit verschiedenen User-Tables und Models. Allerdings hab ich damit noch ein kleines Problem:

Logge ich mich im Händlerbereich ein, findet ein regulärer Login über Auth->login statt. Gleichzeitig wird über eine Komponente eine SessionVar gesetzt, die mir den Zugriff auf den Bereich erlaubt.

Dann browse ich in den Partnerbereich und versuche mich mit dummy-Daten einzuloggen. Das Problem ist nun, dass ich eingeloggt werde, obwohl diese Daten nicht in der Usertabelle für Partner existiert. Ich denke, dass liegt daran, dass Auth->user() vor dem Login ein Ergebnis ausgibt, weil ich ja eigentlich schon eingeloggt bin.

public function login() {
        $user = false;
        if ($this->SessionAuth->checkLogin())
            $this->redirect($this->Auth->loginRedirect);
        if ($this->request->is("post")) {
            $this->data = Sanitize::clean($this->data);
            $user = $this->Partner->find('first', array('conditions' => array('email' => $this->data['Partner']['email']), 'fields' => array('status')));
            if ($user && $user['Partner']['status'] != "valid") {
                $this->Session->setFlash('Account nicht aktiv');
            } else {
                if ($this->Auth->login()) {
                    $this->SessionAuth->setAccess();
                } else {
                    $this->Session->setFlash('Benutzername und/oder Passwort falsch');
                }
            }
            $this->redirect($this->Auth->redirect());
        }
    }

Wie kann ich nun einen 2. Login ausführen unabhängig eines bereits bestehenden logins?

Gruß
M.

Mathias R

unread,
Oct 24, 2012, 7:04:34 AM10/24/12
to cakep...@googlegroups.com
Okay, scheinbar hab ich das Ganze auch ohne eigene Komponente lösen können.

Die Lösung liegt in der sessionKey-Variable der AuthComponent.
In jedem Bereich setze ich diese Variable neu (AuthComponent::$sessionKey = 'Auth.Partner') und schon kann ich diese Bereiche voneinander trennen.


Gruß
M.

Am Dienstag, 23. Oktober 2012 11:00:12 UTC+2 schrieb Mathias R:
Reply all
Reply to author
Forward
0 new messages