Meine Anwendung hat Benutzer Teil und/Admin Teil. Es gibt 2 Modelle Account (wie ein Kunde) und Admin, und ich sollte Account und Admin separat authentifizieren. Administratoren sollten nicht auf das Konto zugreifen und Konten sollten nicht auf den Admin-Bereich zugreifen. Gibt es eine Lösung für mich oder ich sollte 2 verschiedene Anwendungen für Benutzer und Admins schreiben und dann auf Merb 1.1 warten und sie irgendwie in 1 App mounten? Irgendwelche Ideen?Merb-Authentifizierung Frage
Antwort
Ihre Frage scheint mir sehr interessant, ich hatte am Anfang dieselben Probleme. Also, ich kann verschiedene Lösungen vorschlagen, von denen Sie auswählen können, hängt von Ihrer App-Struktur ab.
Wenn alle Benutzer gehören zu einer Klasse, sondern haben spezielles Feld (wie Userclass = (: Client: Moderator: admin, etc.) `ll mindestens App Modifikationen hat, überprüfen Sie die Benutzerklasse Ich denke, es ist keine gute Idee für Sie.
Best Practice - Merb Authentifizierungsstrategien zu verwenden.Es ist sehr flexibel Mechanismus, so dass Sie Klassen auswählen können, mit denen Sie arbeiten möchten.
Zum Beispiel haben Sie 2 grundlegende Strategien: C lientAuth, AdminAuth. Beide verwenden unterschiedliche Benutzerklassen (Client, Admin). Alles, was Sie brauchen - individuelle Strategie-Datei erstellen und dann schließen Sie es an Ihren Router wie folgt aus:
authenticate(ClientAuth) do
match('/profile').to(:controller => ProfileController)
end
authenticate(AdminAuth) do
match('/admin').to(:controller => AdminController)
end
Oder Sie Authentifizierung innerhalb Controller verwenden können:
class AdminController
:before ensure_authenticated, :with => [AdminAuth]
def index
... your stuff ...
end
end
Außerdem können Sie auch nur einen Controller verwenden für die Authentifizierung für beide Klassen beide Strategien wie folgt aus:
class AdminController
:before ensure_authenticated, :with => [AdminAuth, ClientAuth]
end
Nur weil Sie verschiedene Authentifizierungsklassen (Admin, Client) für Ihre Strategien festgelegt haben Sie wi ll der Lage sein, Informationen über sie zu erhalten: session.user.class (es ist ein Grund Ruby-Methode ist der Klassenname des Objekts, um herauszufinden)
Hier einige nützliche Links: