2012-05-08 15 views
8

Chcę mandat, że wszyscy użytkownicy zaakceptować warunki korzystania z usługi, podobnie jak opisano tutaj:Wymyślić, wymagając od użytkownika zaakceptowania warunków korzystania z usługi?

Ruby on Rails/Devise - Bypassing custom validation option in model when resetting password

Jednak istnieją wymogi 2 które sprawiają, że powyższe podejście nie pasuje.

1) Użytkownicy nie są zarejestrowani samodzielnie, a raczej są tworzeni przez administratora systemu. Administrator oczywiście nie może zaakceptować warunków w imieniu użytkowników. Użytkownik powinien zostać poproszony o zaakceptowanie warunków przy pierwszym logowaniu.

2) Jeśli warunki ulegną zmianie po fakcie. Użytkownicy muszą ponownie zaakceptować nowe warunki przy kolejnych logowaniach.

Wydaje się, że są to dość standardowe przepływy pracy. Czy programuje jakiś sposób, aby to osiągnąć?

Jeśli nie, myślę, że ta kontrola będzie musiała zostać zaimplementowana w before_filter na moim kontrolerze aplikacji. (Czuje się brudne mieszanie uwierzytelniania z logiką aplikacji ...)

Czy będę musiał uciec się do tego czy ktoś może zaproponować lepszy sposób?

Dzięki

+2

Myślę, że devise/auth nie ma nic wspólnego z logiką biznesową (warunkami). Będziesz musiał zrobić filtr "przed" w kontrolerze aplikacji. Nie mieszacie auth z logiką biznesową. Użytkownik jest uwierzytelniony, ale nie może uzyskać dostępu do żadnej strony, dopóki nie zaakceptuje warunków użytkowania – bcd

Odpowiedz

0

Nie mogłeś teoretycznie tylko wyłączyć przesuwając dalej w swojej aplikacji za pomocą jQuery?

Wyłącz formularz "kontynuuj" lub "zaloguj się", dopóki nie zaznaczysz pola lub nie naciśniesz przycisku Kontynuuj, a następnie włącz przycisk logowania, gdy już go posiada.

Jeśli chcesz przechowywać te informacje, po prostu zaznacz kolumnę w bazie danych użytkownika, która również zostanie wysłana, gdy zaznaczy pole lub naciśnij przycisk Kontynuuj, lub możesz nawet wykorzystać liczbę liczników jako sposób wiedzy.

Jeśli user.logs> 0, użytkownik zaakceptował już warunki.
Jeśli user.logs == 0, użytkownik musi zaakceptować warunki zanim się zaloguje.

Domyślam się, że zgodnie z twoim pytaniem wydaje się, że łączenie wszystkiego w Devise jest zbyt skomplikowane.

Mam nadzieję, że to pomoże.

2

to nie jest coś, co devise obsługiwałoby i opracowywałoby, nie powinno tego obsługiwać, ponieważ TOS nie dotyczy uwierzytelniania.

To, co można zrobić, to zaimplementować automat stanów, ale może to być bardziej złożone niż to, czego potrzebujesz.

Prostym sposobem byłoby dodanie pola boogowskiego accept_tos do twojego modelu użytkownika i powiązanie go z filtrem before_filter, a następnie ustawienie wartości accept_tos na false za każdym razem, gdy TOS jest aktualizowany.

Powiązane problemy