Mehrere Benutzerrollen in Ruby on Rails

8

Ich baue eine Inventory-Management-Anwendung mit vier verschiedenen Benutzertypen: Admin, Mitarbeiter, Hersteller, Transporter. Ich habe noch nicht angefangen zu programmieren, aber das ist, was ich denke. Hersteller und Transporteure sind mit has_many verbunden: durch viele-zu-viele Verbindungen mit Produkten wie folgt:

%Vor%

Alle vier Benutzertypen können sich anmelden, aber sie haben unterschiedliche Berechtigungen und Ansichten usw. Ich glaube nicht, dass ich sie in die gleiche Tabelle (Benutzer) setzen kann, da sie unterschiedliche Anforderungen haben, Dh: Lieferanten und Hersteller müssen eine Rechnungsadresse und Kontaktinformationen (über Validierungen) haben, aber Admins und Mitarbeiter sollten diese Felder nicht haben.

Wenn möglich, würde ich gerne einen einzigen Anmeldebildschirm haben, im Gegensatz zu 4 verschiedenen Bildschirmen.

Ich frage nicht nach dem genauen Code, um das zu erstellen, aber ich habe Schwierigkeiten, den besten Weg zu finden, das zu erreichen. Irgendwelche Ideen würden sehr geschätzt werden - danke!

    
aguynamedloren 29.12.2010, 04:25
quelle

3 Antworten

5

Ihr grundsätzlicher Ansatz erscheint vernünftig. Ich würde Ihnen raten, eine Basisklasse von Benutzer zu erstellen und STI für bestimmte Benutzertypen zu verwenden, zum Beispiel:

%Vor%

... usw. Auf diese Weise haben Sie, wenn Sie mehrere Benutzertypen unabhängig vom Typ in einer Beziehung zusammenfassen müssen, eine Tabelle, um Benutzer allgemein zu beschreiben. Dies ist ein ziemlich gewöhnlicher Ansatz.

Abhängig davon, wie viel Zugriff verschiedene Benutzer auf das System haben, möchten Sie vielleicht ein Rollenverwaltungs-Juwel wie Declarative Authorization .

    
Dave Sims 29.12.2010, 05:10
quelle
4

Für mehrere Benutzersysteme sind im Allgemeinen bevorzugte Wege - Verwendung eines Rollenmodells oder STI. Wenn Ihre Benutzer mehrere Rollen gleichzeitig haben können, z. B. Einzelbenutzer als Hersteller und Transporter, dann wäre das Rollenbasissystem eine gute Lösung. Wenn Benutzerrolle fest ist, dann denke ich, dass Sie mit STI gehen sollten.

    
rtdp 29.12.2010 05:44
quelle
1

Ich schlage vor, dass Sie ein Benutzermodell, ein Adressmodell, ein ContactInfo-Modell usw. erstellen. Sie sollten diese Arten von Feldern im Benutzermodell NICHT haben. Normalisieren Sie die Datenbank. Haben Sie eine FK in jeder dieser anderen Klassen für User.id.

Wenn Sie sie getrennt aufbewahren müssen, dann normalisieren Sie Logins und machen Sie es polymorph, um auf seinen Besitzer (Hersteller, Mitarbeiter usw.) zu verweisen.

    
sethvargo 29.12.2010 04:33
quelle