Gem filtered_attributes

Cześć,

stworzyłem coś takiego https://github.com/hubertlepicki/filtered_attributes i potrzebuję opinii czy to w ogóle ma sens. Pomysł jest taki aby filtrować parametry przekazywane do metod typu mass-assignment, na poziomie kontrolerów a nie modeli.

Moje rozumowanie jest takie, że attr_accessible jest dość powszechnie używane źle, bądź nie używane wcale. Przeniesienie logiki filtrowania parametrów do modelu i stworzenie ładnych helperów typu user_attributes zamiast params[:user] mogłyby tą sprawę poprawić. Co myślicie?

Nie pamiętam gdzie, ale swego czasu wylewałem żale, że railsy źle do tego podchodzą i robią to na poziomie modelu a nie kontrolera. Mogę zatem powiedzieć, że fajnie iż znalazł się ktoś kto zrobił to jak należy :).

Odnośnie spraw technicznych - wrzuć Gemfile.lock do .gitignore.

Tak to było zrobione w merbie i mi osobiście też się takie podejście podoba, chociaż w 3.1 problem jest już mniejszy, bo można stosować role przy zapisywaniu do modelu. Yehuda kiedyś mówił, że próbował kiedyś przeforsować, żeby coś takiego było wspierane w samych railsach, ale chyba nie przekonał reszty core teamu.

O! To ja już grzebię jak to było zrobione w Merbie, bo jeszcze tego nie widziałem.

Tutaj jest to o czym pisał Piotr: https://github.com/wycats/merb/tree/master/merb-param-protection jeśli ktoś byłby zainteresowany.

Całkiem mi się podoba, koncepcja jest rzeczywiście podobna. Z tym że wolałbym nie modyfikować samej kolekcji params, to po pierwsze, po drugie filtrowanie parametrów prawie zawsze będzie odbywać się w odniesieniu do zestawu atrybutów danego zasobu, np. params[:post], params[:user]. Składnia używana w Merbie pozwala na filtrowanie dowolnych atrybutów.

Oba rozwiązania mają słaby punkt, pod postacią braku wsparcia dla ról, ale myślę że to by się dało też rozwiązać.

Ja tam extenduje zmieniany obiekt odpowiednim modułem który implementuje mass_assignment_authorizer.