servus zusammen,
mit Interesse habe ich Eure Unterhaltung bezüglich
des rails-authorization-plugin verfolgt. Persöhnlich
setze ich restful-authentication im Zusammenspiel mit
role_requirement[1] ein. Ist einfach und funktioniert
hier problemlos.
Ich schreibe deshalb, weil mich an all den Plugins eines
ziemlich stört: sie sind alle zu statisch. Will meinen,
man muss (meistens in den betreffenden Controllern) die
Zugriffsregeln festlegen. Etwa der Form:
require_role “admin”, :except => :index
Mit anderen Worten: es steht schwarz auf weiß im Programm
und kann zur Laufzeit nicht mehr geändert werden:
jedwede Änderung hier zieht einen Neustart der Applikation
nach sich und das ist es was mich stört.
Flexibler wäre es doch, wenn beim Starten von Rails alle
Controller und deren öffentliche Aktionen[2] in einer
Struktur im Speicher vorgehalten werden. Über das Webfrontend
kann dann der Admin die Aktionen der Controller bequem mit
den Benutzerrollen verknüpfen - welche in der DB landen.
Bei einem nun erfolgenden Request wird über den ohnehin
vorhandenen before_filter in die DB geschaut und die
require_role Bedingung mit den zugehörigen Aktionen zur
Laufzeit in das Plugin “injiziert” - wenn ich so sagen darf.
Die Logik des before_filters lagert man in ein eigenes Plugin
aus und man folgt dem Prinzip DRY, da die ewigen Wiederholungen
aus den Controllern verschwinden.
Probleme sehe ich beim Cachen - müsste man halt testen,
und natürlich entstehen zusätzliche Datenbankzugriffe.
Aber wenn meine Denke richtig ist, kann man so völlig
flexibel an den Rechten der Benutzer schrauben, ohne die
Applikation neu zu starten.
Abschließende Frage: geht das überhaupt so und gibts das
vielleicht schon?
Gruß
Torsten
[1] http://github.com/timcharper/role_requirement/tree/master
[2] über ActionController::Routing::Routes.routes auslesbar