Почему DjangoObjectPermissions не работает для пользователя admin?
Проблема: Я назначил DjangoObjectPermissions, который отлично работает для обычных пользователей, но не работает для администраторов.
models.py
class Transformer(models.Model):
name = models.CharField(max_length=150, unique=True)
alternate_mode = models.CharField(
max_length=250,
blank=True,
null=True)
description = models.CharField(
max_length=500,
blank=True,
null=True)
alive = models.BooleanField(default=False)
class Meta:
ordering = ('name',)
def __str__(self):
return self.name
serializers.py
class TransformerSerializer(serializers.ModelSerializer):
class Meta:
model = Transformer
fields = "__all__"
views.py
class TransformerList(generics.ListCreateAPIView):
queryset = Transformer.objects.all()
serializer_class = TransformerSerializer
permission_classes = [DjangoObjectPermissions, ]
def perform_create(self, serializer):
instance = serializer.save()
assign_perm("delete_transformer", self.request.user, instance)
class TransformerDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Transformer.objects.all()
serializer_class = TransformerSerializer
permission_classes = [DjangoObjectPermissions, ]
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'snippets',
'class_based_api_views',
'guardian'
]
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'guardian.backends.ObjectPermissionBackend',
)
Тестирование
создан пользователь admin -> username=admin
создан обычный пользователь -> имя пользователя=user3
создал один пост-трансформер, используя пользователя user3
.
Детальное представление объекта
Изображение детального вида объекта
Разрешение объекта
Изображение разрешения объекта
user3 может удалить свой собственный пост, как ожидалось
Изображение для user3 может удалить свой собственный пост, как ожидалось
Админ может делать все на объекте: не ожидается
Админ может делать все на объекте: не ожидается
Вопрос: Почему пользователь Admin может редактировать/удалять объект, на который у него нет прав.
Суперпользователь имеет доступ ко всем ресурсам независимо от установленных разрешений.