/ / Grupy użytkowników Django z dekoratorami a uprawnienia - python, django

Grupy użytkowników Django z dekoratorami vs uprawnieniami - python, django

Rozumiem podstawowe uwierzytelnianie użytkowników, logowanie, tworzenie kont, rozszerzanie modelu użytkownika ...

Próbuję stworzyć stronę, na której nauczyciele i uczniowie mogą się zalogować. Nauczyciele mieliby dostęp do stron, do których uczniowie nie mają dostępu, z prawem do odrabiania prac domowych itp.

Myślę, że można to zrobić za pomocą:

  1. Przypisywanie użytkownika do określonej grupy po utworzeniu.
  2. Używanie dekoratorów do ograniczania dostępu do odpowiedniej grupy.

.

@login_required
@user_passes_test(not_in_student_group, login_url="/login/")
def some_view(request):
# ...

def not_in_student_group(user):
if user:
return user.groups.filter(name="Student").count() == 0
return False

Uwaga Otrzymałem powyższy kod z:

http://bradmontgomery.blogspot.com/2009/04/restricting-access-by-group-in-django.html

Pytanie:

  1. Czym różni się korzystanie z uprawnień od powyższego podejścia?

  2. W jaki sposób można używać uprawnień i w jaki sposób definiowanie uprawnień pomaga mi osiągnąć powyższe wyniki? (Jeśli jest to możliwe, czy powinno być używane?)

Odpowiedzi:

4 dla odpowiedzi № 1

Wygląda na to, że ludzie mogą uzyskać takie same wyniki w Django na sto sposobów, jeśli chodzi o autoryzację i uprawnienia. Zdecydowanie grupy są w jedną stronę.

Uprawnienia Django są zwykle oparte na twoimdane, więc „oparte na tabeli” lub „oparte na wierszach”. Uprawnienia oparte na wierszach nie są rodzime dla Django, musisz albo przetoczyć własne rozwiązanie, albo użyć czegoś takiego jak django-guardian lub django-authority Więcej tutaj.

Dokumenty dotyczące uprawnień to tutaj

class Quiz(models.Model):
title = models.CharField(max_length=64)

class Meta:
permissions = (
("can_take_quiz", "Can take quiz"),
("can_grade_quiz", "Can Grade Quiz"),
)

Z tym modelem i tymi uprawnieniami możeszzobacz, że prawdopodobnie adiutant studencki otrzyma pozwolenie na ocenę konkretnego quizu lub quizu dla danego nauczyciela, w tym przypadku przydatne będą uprawnienia oparte na wierszach. Wdrożenie czegoś takiego (za pośrednictwem has_permission) może rozwiązać problem (i jest bardziej jednoznaczne) niż dodanie użytkownika do grupy.

Możesz dodawać użytkowników do grup takich jak Tyjuż, a następnie daj uprawnienia całej grupie, aby dodać quiz lub quizy (nauczyciele mogą dodawać / edytować / usuwać / oceniać, uczniowie mogą brać) quizy i sprawdzać na podstawie tego.

wtedy twój test_użytkownika będzie user.has_perm("quiz.take_quiz") lub zamiast dekoratora, możesz przekazać konkretny quiz do zaplecza opartego na obiekcie.