2011-06-30 10 views
5

Potrzebuję systemu, w którym zwykły użytkownik może edytować model, ale zmiany nie mają miejsca, dopóki nie zostaną zatwierdzone przez administratora. Znalazłem klejnot o nazwie paper_trail, który miał wersję modelu, ale nie obsługuje konkretnie tego, co chcę zrobić. Zastanawiam się, jak inni radzą sobie z tym problemem. Powinienem dodać, że istnieją również skojarzenia, które chciałbym móc edytować w tym samym czasie. Nie są bardzo skomplikowane, na przykład jeden z nich to aliasy.Jak skonfigurować zatwierdzenie administratora edycję modelu

Bardziej skomplikowana część może być przypadkiem, w którym wielu użytkowników edytuje ten sam model i próbuje wykonać scalenie.

+1

kiedykolwiek znajdziesz rozwiązanie? – ZMorek

Odpowiedz

1

Jednym z podejść byłoby wykonanie wersji z zatwierdzeniem wersji.

Każda edycja tworzy nową wersję obiektu modelu i jego powiązań. W dowolnym momencie istnieje tylko jedna "aktualna" wersja dowolnego obiektu modelu (i jego reprezentacja w bazie danych).

Jeśli dwóch użytkowników zgłosi dwie osobne zmiany, utworzą one dwie "oczekujące" wersje.

Administrator zatwierdziłby zmiany, przenosząc bieżącą wersję do nowej "oczekującej" wersji. Można również osiągnąć połączenia, ale może to być bardzo specyficzne dla danej domeny i może prowadzić do konfliktów, więc utrzymanie oddzielnych wersji i tak byłoby mądre.

Istnieje kilka sposobów na osiągnięcie tego celu, a najlepsze zależy od dynamiki sytuacji.

Polecam, patrząc na to, jak działa Git i próbując modelować twój system po tym. Jakiś wskaźnik do obiektu modelu HEAD z historią wersji i możliwością przeniesienia HEAD do różnych wersji. Scalanie może również działać podobnie do Git.

Nadzieję, że pomaga.

+0

Nie sądzę, że tworzenie innych wersji modeli jest drogą do zrobienia, ponieważ zamierzasz zanieczyszczać bazę danych innymi wersjami. Tak naprawdę myślę, że musi istnieć sposób modyfikacji paper_trail, aby to zrobić. Podobnie jak tworzenie nowej wersji, ale nie aktualizowanie bieżącego obiektu. – hadees

+0

cóż, możesz oczyścić stare wersje z cronem lub po zatwierdzeniu, ale zasadniczo jest to ten sam problem. Tworzysz nowe wersje, a następnie usuwasz te, których już nie interesujesz. –

0

Patrzę na ten sam problem, tj. Zatwierdzanie poprawek, mogę natknąć się na this, podejrzewam, że można zrobić coś podobnego z paper_trail.

Powiązane problemy