В интерфейсе администратора django можно указать разрешения для каждой отдельной Модели. Варианты разрешений для примера модели Customer:
- Может добавить клиента
- Может изменить клиента
- Может удалить клиента
- Может просмотреть клиента
Однако эти разрешения, похоже, не применяются к представлениям API REST Framework (rest_framework.viewsets.ModelViewSet
), реализованным для Customer
следующим образом:
class CustomerViewSet(viewsets.ModelViewSet):
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
class CustomerSerializer(serializers.ModelSerializer):
class Meta:
model = Customer
fields = '__all__'
Я думал, что установив От DEFAULT_PERMISSION_CLASSES до DjangoModelPermissions эти разрешения будут отражены, но это не так:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.DjangoModelPermissions',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
}
Должны ли права, определенные в admin, работать в представлениях также с этими настройками, если они не будут, и / или есть ли какой-либо способ чтобы это произошло? Преимущество заключается в том, что системные администраторы могут легко определять группы в интерфейсе администратора и адаптировать свои разрешения к своим проблемным областям, поэтому очень важно иметь возможность определять разрешения таким образом. Я видел много других способов реализации разрешений, но они, как я уже видел, требуют большой настройки определений View в python.
Версии:
- Django 2.2.9
- djangorestframework 3.11.0
- djangorestframework-simplejwt 4.4.0