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 № 1MultipPermissionsRequiredMixin 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")