On Thursday 01 May 2008, Jan Luehr wrote:
> Wie würdet ihr an das Problem herangehen?
Aus leidvoller Erfahrung empfehle ich, Rechte für einzelne Operationen
feinkörnig zu vergeben. Diese Rechte können natürlich in Rollen
zusammengefasst und Benutzer diesen Rollen zugeordnet werden.
Ich habe in einem Projekt das authorization-Plugin verwendet, mit dem
man quasi-deklarativ Sachen schreiben kann wie
permit?("owner of :object")
Sieht schön aus, nicht wahr? Führt aber (mich jedenfalls) dazu,
Entscheidungen über Rechte in den Code zu verlegen, wo sie nicht
hingehören: "Ach, der Benutzer ist Admin oder hat Rolle xyz -- dann
darf er das." Teufelszeug. Führt zu Wiederholungen und ist schlecht zu
warten. Im Anwendungscode sollte nur stehen "Darf Benutzer B Aktion A
ausführen?". Die Zuordnung gehört an eine andere Stelle.
Es gibt ein oder mehrere ACL/RBAC-Plugins, mit denen Benutzer, Rollen
und Rechte einigermaßen komfortabel verwaltet werden können. Ich kenne
keine vorgefertigte Lösung, die mit "dynamischen Rollen" umgehen
können, etwa einer besonderen Beziehung des Benutzers zu einem Objekt
("Besitzer") oder Eigenschaften des Objekts. Das geht auch ohnehin
fließend in die allgemeine Geschäftslogik über.
Was ich auch nicht in einer aktuellen Form kenne, ist ein Ansatz, der
Rechte implizit in Views anwendet, also so, dass etwa f.text_field
inaktiven Text oder gar nichts zeigt, wenn der Benutzer das Attribut
nicht ändern bzw. sehen darf. Es gab vor Jahren Model Security von
Bruce Perens, ich nehme aber an, das ist nicht mehr aktuell.
Michael
--
Michael Schuerig
mailto:[EMAIL PROTECTED]
http://www.schuerig.de/michael/
_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug