2009-08-07 9 views
0

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

1

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.

  1. 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.

  2. 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:

  1. http://www.slideshare.net/hassox/merb-auth-presentation
  2. http://merbunity.com/tutorials/19
  3. http://www.slideshare.net/carllerche/merb-pluming-the-router-presentation
  4. http://merbivore.com/documentation/1.0/doc/rdoc/merb-auth-core-1.0/index.html?a=C00000025&name=Strategy