2012-06-04 13 views
6

Ich versuche, eine Autorisierung/Authentifizierungssystem einzurichten, und ich bin verwirrt, so habe ich ein paar Fragen:Mit Devise/Cancan/Rolify zusammen

  1. In vielen Tutorials, Leute richten eine Benutzer/Rolle-HABTM-Beziehung ein. Ich bekomme, dass dies ermöglicht für jeden Benutzer mehrere Rollen haben, aber wenn Sie wollen, dass jeder Benutzer nur eine Rolle haben, ist das notwendig? Wenn ich Optionen für "aktive" und "inaktive" Benutzer haben möchte, sollten diese Rollen oder etwas anderes sein?
  2. Im Cancan-Wiki heißt es, wenn Sie möchten, dass ein Benutzer eine Rolle hat, sollten Sie nur ein Attribut erstellen und dann "can : manage,: all if user.role ==" admin "" verwenden ist das nicht gefährlich, weil jedes Mal "admin" nur eine Zeichenfolge ist? Ist das wichtig? Was ist ein besserer Weg, damit umzugehen?

Ich habe mein Bestes versucht, durch die Dokumentation für alles beteiligt zu lesen, und ich begann mit diesem Tutorial

http://railsapps.github.com/tutorial-rails-bootstrap-devise-cancan.html

obwohl ich auch http://starqle.com/articles/rails-3-authentication-and-authorization-with-devise-and-cancan-part-1/ und tonyamoyal.com/2010 gelesen habe/09/29/rails-authentication-with-devise-und-cancan-part-2-restful-resources-for-administrators/

Ich kann es einfach nicht so funktionieren, wie ich es möchte. Wie mache ich das?

Antwort

8

1. Sie brauchen nicht auf mehrere Rollen oder einem Rollentisch

CanCan Agnostiker ist, wie Sie Rollen in der Anwendung definieren. Sie könnten genauso gut ein Rollenfeld in Ihrem Benutzermodell haben.

Wie für "aktive" und "inaktive" Benutzer haben Sie zwei Möglichkeiten. Sie könnten ein Feld für diesen Status haben, oder Sie könnten eine "inaktive" Rolle haben und jede andere Rolle als "aktiv" betrachten. Dies hängt davon ab, was Sie mit "aktiv" meinen und wie Sie diese Informationen in Ihrer Anwendung verwenden.

2. Es ist nichts falsch mit der Rolle eines Benutzers in einem String zu speichern.

Die Tatsache, dass die Rolle als String gespeichert wird, macht sie nicht weniger sicher. Sie sollten jedoch attr_protected to prevent mass assignment der Benutzerrolle verwenden.

attr_protected :role 

Auf diese Weise können Benutzer ihre eigenen Rollen nicht aktualisieren.