2013-09-24 16 views
5

Das Projekt, an dem ich gerade arbeite, ist in eine Admin-Konsole und das normale Frontend aufgeteilt. Front und Backend befinden sich in derselben Laravel-Instanz.Mehrere Auth-Sitzungen in Laravel 4

Im Frontend versuche ich ein Benutzer-Login-System zu erstellen, das ausschließlich für das Frontend funktioniert. Es verwendet eine andere Tabelle und ein anderes Modell und hat andere Beziehungen als das Benutzermodell für den Administrator.

Was ich nicht herausfinden kann, ist eine Möglichkeit, die Laravel Auth-Klasse für beide Systeme zu verwenden. Logisch verwendet Auth eine einzige Konfigurationsdatei und mehr auf den Punkt, einen Sitzungsnamen.

Eine Lösung, die vorgebracht wurde, ist nicht eine andere Tabelle und ein anderes Modell zu verwenden und irgendeine Form von acl für die Unterscheidung zu verwenden. Aber ich mag die Idee nicht, Frontend und Backend auf diese Weise zu mischen. Vor allem, weil ich dann dem Admin-Benutzermodell plötzlich alle Felder und Beziehungen zuordnen müsste, die zuvor für den Frontend-Benutzer einmalig waren.

Es scheint einfach nicht der richtige Weg, um Dinge zu tun. Ich könnte zu einem anderen Authentifizierungssystem wechseln oder den Admin in ein Paket mit eigenen Konfigurationen zerlegen, aber der Umfang des Projekts lässt solche zeitaufwendigen Änderungen nicht zu.

Ich würde jede mögliche Idee begrüßen, die Sie zur Verfügung stellen konnten.

+1

könnte dies sein helful http://stackoverflow.com/questions/18785754/laravel-4-need-to-auth-with-2-different-tables – cyvvilek

Antwort

5

Dies ist ein Problem, das ich vor kurzem auch begegnet. Die gesamte separate Umgebung war nicht sehr einfach, besonders wenn Sie bereits Entwicklungs- und Produktionsumgebungen haben.

Ich habe jedoch einige Zeit damit verbracht, ein Paket zu erstellen, um dieses Problem zu lösen, das Sie unter https://github.com/ollieread/multiauth finden können. Das Paket selbst ist im Wesentlichen eine Factory-Klasse für Auth, dass Sie mehrere Instanzen davon nutzen kann, so dass Sie Zugriff es etwa so:

Auth::admin()->check(); 
Auth::user()->check(); 
Auth::whatever()->check(); 

Ich hoffe, dass das Paket hilft Ihnen, oder jemand anderes für diesen Ansatz suchen.

2

Ich bin mir nicht sicher, aber vielleicht ist es nützlich. Warum nicht versuchen, eine separate Umgebung für admin zu erstellen? Und dann haben Sie etwas wie app/config/admin/session.php und app/config/session.php für die Produktion (das ist die Standardumgebung).

Sie können hier sehen, wie die Einrichtung Umgebungen http://andrewelkins.com/programming/php/how-to-set-laravel-4-environments/

Aber wie gesagt, es ist nur eine Idee, ich bin nicht ganz sicher davon :)

+0

Umgebungen deutlich die Art und Weise sind hier zu gehen. Richten Sie admin.yoursite.com ein und ändern Sie die Konfigurationsdateien entsprechend. Dies setzt voraus, dass Sie Ihrer Benutzerklasse keine benutzerdefinierten Methoden hinzufügen, die rollenspezifisch sind. – Makita

1

Klingt wie Sie sollten die App in zwei Codebasen teilen, wenn die verschiedenen Benutzereinheiten selten oder nie die gleiche Schnittstelle sehen müssen. Sie würden natürlich immer noch dieselbe Datenbank abfragen.

Nicht nur wird dies Ihre Auth Probleme lösen, sondern auch die Pflege des Codes viel einfacher. Wenn Sie beispielsweise Updates an die Admin-Konsole übertragen, müssen Sie diese App nur in den Wartungsmodus versetzen, während Sie das (vermutlich) kritischere Frontend in Betrieb halten.

+0

Das ist eigentlich ein sehr guter Punkt.Wir haben die Idee, diese Codebasen zu spalten, zurückgewiesen, weil die Vorteile in unserem Fall überwiegen. Der Punkt über separate Wartungsmodi könnte jedoch die Waage kippen. –