Я создаю проект с использованием DRF (Django Rest Framework), я застрял в момент обновления данных в таблицах и считаю, что он очень уязвим для неправильного использования. Мой код ниже
models.py
from django.db import models
from Mera.settings.common import AUTH_USER_MODEL
from Mera.constant import UNIT_TYPES
class Item(models.Model):
owner = models.ForeignKey(AUTH_USER_MODEL, related_name='item_owner', null=True, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
name = models.CharField(max_length=100)
previous_code = models.CharField(max_length=100, blank=True, default="")
short_name = models.CharField(max_length=100, blank=True, default="")
serializers.py
from rest_framework import serializers
from commodity.models import Item
from Mera.settings.common import AUTH_USER_MODEL
class ItemSerializer(serializers.ModelSerializer):
def create(self, validated_data):
return Item.objects.create(**validated_data)
def update(self, instance, validated_data):
# instance.name = validated_data.get('name', instance.name)
instance.save()
return instance
def to_representation(self, instance):
response = super().to_representation(instance)
response['owner'] = UserSerializer(instance.owner).data
return response
class Meta:
model = Item
fields = '__all__'
class UserSerializer(serializers.ModelSerializer):
items = serializers.PrimaryKeyRelatedField(many=True, queryset=Item.objects.all())
class Meta:
model = AUTH_USER_MODEL
fields = ['id', 'username', 'items']
просмотров .py
from rest_framework import generics
from rest_framework import mixins
from django.contrib.auth.models import User
from commodity.models import Item
from commodity.serializers import ItemSerializer, UserSerializer
class ItemList(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
queryset = Item.objects.all()
serializer_class = ItemSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class ItemDetail(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = Item.objects.all()
serializer_class = ItemSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
Я сомневаюсь, что если кто-то получит метод API и формат данных из dev-tools и использует собственную аутентификацию, он / она сможет измениться ( ОБНОВЛЕНИЕ) данных любой строки, просто изменив id (первичный ключ) в запросе, таким образом, они могут изменить данные всей таблицы, даже если у них есть роль для этого или нет ,
Также, аналогично, если кто-то удаляет id (первичный ключ) из запроса, instance.save () может создать новую строку, даже из API обновления.
Пожалуйста, DRF, Django Руководство сообщества, если я ошибаюсь, предоставьте мне лучший способ реализации аутентификации по операциям и по строкам, если есть что-то подобное.