2012-10-23 32 views
7

Buduję aplikację, która zakłada istnienie określonych grup i uprawnień do przepływu pracy. Na przykład "członek" może zalogować się do aplikacji, przeglądać i edytować swoje dane osobowe, ale nie widzi notatek, które byłyby zwykle wyświetlane na tym samym ekranie. "Pracownik" może zobaczyć te notatki i utworzyć lub edytować własne, ale tylko "członek zarządu" może usuwać lub edytować notatki innych osób.czy grupy i uprawnienia Django powinny być zakodowane na stałe lub bootstrapowane?

Mój problem polega na ładowaniu danych dla tej aplikacji. Mogę tworzyć dane o urządzeniach JSON dla grup, ale potem muszę mocno kodować PK, co wydaje mi się złą praktyką (co, jeśli aplikacja stron trzecich, którą chciałem użyć, zrobiła to samo i był konflikt?) Większy Problem to uprawnienia - musiałbym dodać PKs do uprawnień, które z kolei miałyby PKs do ich typów zawartości.

Przeczytałem o używaniu haka post_syncdb do dodawania początkowych danych w bardziej programowy sposób, co, mam nadzieję, pomoże mi rozwiązać trudny problem PK. Ale zastanawiam się, czy to jest najlepsze rozwiązanie tego problemu, czy też "nadużywania" koncepcji Django Group i Permission, tutaj, i powinien robić coś innego, na przykład tworzenie nowych modeli lub po prostu umieszczanie flag (np. is_member_manager ") na moim profilu profilu użytkownika, itp.

Odpowiedz

0

Zwykle utwórz aplikację o nazwie init za pomocą polecenia zarządzania initialize, umieściłem tam cały kod, aby uruchomić aplikację. To pozwoli Ci:

  • jeśli używasz narzędzia do instalacji (używam [ansibl] (http://www.ansible.com/home, bat może być amy Fabric narzędzie, bash ...) można zautomatyzować ten proces i usunąć aplikację z teh init zainstalowane aplikacje po rezerw (najpierw zainstalować)

lub

  • sprawdzić, czy polecenie zostało już uruchomiona, aby pominąć proces (Group.objects.all().exists()?)

(lub oba)

Znalazłem to rozwiązanie bardzo łatwe w utrzymaniu i wystarczająco silne dla wszelkich okoliczności.

post_syncdb (post_migrate w djang 1,7) nie jest rozwiązaniem, ponieważ jest wywoływana dla każdej migracji

Jeśli tylko trzeba ładować dane i/lub utworzyć rekordy (tj Grupy/adminów ...) najlepszym rozwiązaniem IMHO jest użycie Migracja danych] (https://docs.djangoproject.com/en/1.7/topics/migrations/#data-migrations)