Rollenbasiertes Authorization-Framework?

ja hallo erstmal,…

ich suche der derzeit ein authorization framework, das mit
Benuzterrollne /
Gruppen umgehen kann.
restful-authorisation scheint irgendwie nur benutzer zu kennen…

Das ganze muss zwar nicht so mächtig sein, wie acegi, aber die Richtung wäre
schon nett.

Das Framework sollte:

  • Den Nutzung von nicht erlaubten Actions unterbinden, d.h. auf
    controller-Ebene greifen.
  • Eher unobstrusive in die Anwendung eingreifen. Es wäre z.B. schön, wenn in
    den Anwendungscontroller kein Code erforderliche wäre, sondern sie zur
    Laufzeit erweitert werden.
  • Rechte und Rollen zentral verwalten.
  • Nice to have: links auf nicht erlaubte controller- /
    action-Kombinationen
    ausblenden.
    D.h. bei View-Code wie <%= link_to … if allowed?(controller,action) %>
    das “if allowed(controller,action)?” überflüssig machen.

Kennt ihr da was nettes?

Danke,
Alles Gute
Jan

Also ich benutze: http://active-rbac.rubyforge.org/.
Die aktuelle Version ist wohl noch nicht so komplett wie die “alte”.
Aber für “einfache” Rollenbasierte Auth. vollkommen ausreichend.

Für acts_as_authenticated gibt es meine ich auch eine Rollen Erweiterung
wenn ich mich nicht täusche. Aber vielleicht wirst du ja mit dem
active-rbac froh.

Gruss

Daniel

Jan L. schrieb:

wir benutzen Rolerequirement(Google Code Archive - Long-term storage for Google Code Project Hosting.
rolerequirement/) was eigentlich sehr gut funktioniert. Hat längst
nicht die Funktionenvielfalt von acegi, dafür bricht man sich auch
nicht die Finger, um das aufzusetzen. Das Schöne daran finde ich,
dass es recht einfach zu verstehen und zu erweitern ist - wir hatten
da ein paar spezielle Anforderungen, die man nach ein bisschen
rumprobieren aber relativ einfach einbauen konnte.

Das Framework sollte:

  • Den Nutzung von nicht erlaubten Actions unterbinden, d.h. auf
    controller-Ebene greifen.

jo, das funktioniert mittels require_role “admin” im Controller. Dazu
gibt’s for, :only, :for_all_except, :except, um das für einzelne
Actions speziell einzustellen. Dazu :if und :unless, denen man einen
Block übergeben kann, um zur Laufzeit zu ermitteln, ob autorisiert
werden soll oder nicht.

  • Eher unobstrusive in die Anwendung eingreifen. Es wäre z.B.
    schön, wenn in
    den Anwendungscontroller kein Code erforderliche wäre, sondern sie zur
    Laufzeit erweitert werden.

Das ganze läuft am Ende über Filter (so wie restful_authentication
auch). Wir haben Controller für verschiedene Bereiche (admin,
public), und packen das :require_role mit in den Bereichscontroller,
von dem die einzelnen Controller erben. Ist für uns unobtrusive
genug, weiß nicht, ob dir das so reicht. Irgendwo muss
das :require_role halt stehen, ich finde es eigentlich im Controller
ganz gut aufgehoben, aber das ist wohl Geschmackssache…

  • Rechte und Rollen zentral verwalten.

Tja, ne Verwaltung für Rechte und Rollen gibt’s nicht: Das haben wir
selber was schrauben müssen. Und wirklich richtig dynamisch ist das
auch nicht: Wenn dir eine Liste mit Controllers/Actions vorschwebt,
wo man einzelne actions an und ausschalten kann - sowas ist das
nicht. Man kann Usern nur Rollen zuweisen oder wegnehmen. Was die
bewirken, steht dann nur im Code: Wenn jemand da was wirklich richtig
dynamisches kennt, das würd mich auch interessieren…

  • Nice to have: links auf nicht erlaubte controller- / action-
    Kombinationen
    ausblenden.
    D.h. bei View-Code wie <%= link_to … if allowed?
    (controller,action) %>
    das “if allowed(controller,action)?” überflüssig machen.

ja, das steht auch noch mit auf meiner nice-to-have-Liste…

GrüßeStefan