Autoryzacja - rozwiązania

Ponieważ silnik forum nie wspiera wydzielania tematów, proponuję żeby tutaj przenieść dyskusję o autoryzacji.

Przywołajmy dyskusję z tamtego wątku:

[quote=l0pez]Authlogic to rozumiem ze do autentykacji. A co do autoryzacji?

Pozdrawiam[/quote]

[quote=Tommy][quote=l0pez]Authlogic to rozumiem ze do autentykacji. A co do autoryzacji?

Pozdrawiam[/quote]
Tutaj resful widać, że jest bardziej rozbudowany, ale do prostych aplikacji, nie musisz od razu używać Roles, może ci wystarczyć dodanie do modelu boolean z aktywacją admina i to wystarczy, ale pewnie i tak zaraz ktoś rozbuduje authlogic jak to było z restful.[/quote]

[quote=Tomash]Do autoryzacji to używamy in-house’owego rozwiązania, które niedawno trafiło na github i dziś właśnie rozszerzyłem o to, co chciałem:
http://github.com/aenima/base-auth/tree/master
Dwa ekrany kodu, a jaka moc. Cały artykuł o tym będzie na firmowym techblogu jutro w samo południe (leży w mefiście i czeka na publication date :smiley: ).

To co daje restful_auth w temacie autoryzacji to dość słaby dowcip. Base_auth może nie jest doskonały ani najłatwiejszy w użyciu, ale keeps things simple i jak na razie dał radę we wszystkich projektach, w których był zastosowany.

Powiem jednak szczerze, że do kategorii “awesome” się nie nadaje. Jeszcze nie :D[/quote]

Jako że sam nie wspominam pierwszych chwil z base_authem jako najgładsze, a i się nam plugin z lekka rozrósł i rozwinął, popełniłem na blogu firmowym mały tutorial jak z nim bezboleśnie zacząć:
http://blog.aenima.pl/2008/12/8/base-auth-a-complete-tutorial-to-securing-your-rails-application

Tekst jest trochę Work In Progress, więc niewykluczone że będzie przechodził mniejsze lub większe zmiany niedługo.

Czyli w skrócie base-auth to nic innego jak before_filter z przekierowaniem jeśli sprawdzenie użytkownika da false dla danej akcji/obiektu?

Właśnie autoryzacja mi spędza sen z powiek, mam postawione dość duże wymagania względem tego mechanizmu i się momentami gubię.
Próbuje stworzyć własny system, do pewnego systemu gdzie jest ważna publikacja.

U mnie wygląda to tak

są: artykuły, działy (grupy), użytkownicy, role, prawa i powiązania - wszystko z powodu tego że muszę mieć dość dużą swobodę w późniejszym zarządzaniu, a większość uprawnień ma być tworzona z panelu administracyjnego,

artykuł ma dział i uzytkownika (autora)
użytkownik ma rolę w danym dziale (może być moderatorem w komunikacji społecznej, edytorem w dziale organizacji czy publicystą w dziale kadr)
każda rola ma prawa, jako akcje np: edit, publish, accept, reject, delete
użytkownik może mieć w danym dziale, mimo roli, dodatkowe uprawnienia, czyli edytor z możliwością :publish
użytkownik może mieć przypisane prawa do artykułu, czyli pomimo przynależności do innej grupy i roli, może mieć pełen zestaw praw dla danego artykułu

teoria teorią i nawet się udaje, do tej pory zrobiłem podklasę w użytkowniku, która buduje dość skomplikowane zapytania - wybiera obiekty i sprawdza warunki na nich, w efekcie wygląda to mniej więcej tak:

user.rights.in(dzial).as(:editor).can(:edit).article?(@article) user.rights.in(dzial).has_role?(:editor) user.rights.article(@article).can?(:edit)
tylko mam wrażenie, że zagoniłem się w kozi róg… czy ktoś mógłby mi doradzić jakieś rozwiązanie, rozpatrywałem właśnie base-auth do użycia tego ale jakoś tego nie widzę.

z góry dziękuje

Ugh. Według tej logiki railsy to nic innego jak CGI+ERB :wink:
Weź przeczytaj readme base-autha (autoryzację przez kontroler). Powinien poradzić sobie z Twoim problemem :wink:

spis i porównanie pluginów do autoryzacji można znaleźć tutaj:

http://steffenbartsch.com/blog/2008/08/rails-authorization-plugins/

może się komuś przyda.

rzeczywiście base-auth jest całkowicie wystarczający, wręcz idealny do tego. dzięki wielkie panie Tomashu za tutka