/ / django Uprawnienia użytkownika i wymagana uprawnienie Mixin - python, django, django-1.11

django Uprawnienia użytkownika i wymagana uprawnienie Mixin - python, django, django-1.11

W tym kodzie Django sprawdzi wszystkie uprawnienia w krotce permission_required a jeśli użytkownik uzyskał wszystkie uprawnieniadostęp do widoku. Chcę podać widok, jeśli użytkownik ma jakieś uprawnienia na podanej liście lub krotce. Np .: W tym szczególnym przypadku, jeśli użytkownik ma tylko polls.can_open pozwolenie Chcę podać widok

from django.contrib.auth.mixins import PermissionRequiredMixin

class MyView(PermissionRequiredMixin, View)
permission_required = ("polls.can_open", "polls.can_edit")

Odpowiedzi:

1 dla odpowiedzi № 1

MultipPermissionsRequiredMixin w django-braces jest to, czego potrzebujesz.

dokument jest tutaj. Próbny:

from django.views.generic import TemplateView

from braces import views


class SomeProtectedView(views.LoginRequiredMixin,
views.MultiplePermissionsRequiredMixin,
TemplateView):

#required
permissions = {
"all": ("blog.add_post", "blog.change_post"),
"any": ("blog.delete_post", "user.change_user")
}

Ten widok mixin może obsługiwać wiele uprawnieńustawiając atrybut obowiązkowych uprawnień jako dyktat z kluczami any i / lub all na listę lub krotkę uprawnień. Cały klucz wymaga, aby request.user miał wszystkie określone uprawnienia. Każdy klucz wymaga, aby request.user miał co najmniej jedno z określonych uprawnień.


2 dla odpowiedzi nr 2

Mixin domyślnie nie obsługuje warunków OR, ale możesz po prostu zastąpić has_permission() metoda sprawdzania uprawnień samodzielnie. Coś jak:

def has_permission(self):
user = self.request.user
return user.has_perm("polls.can_open") or user.has_perm("polls.can_edit")