DRF - Запретить пользователям ссылаться на объекты, которые им не принадлежат
У меня есть две такие модели с отношением родитель-ребенок:
models.py
class Bank(...):
user = models.ForeignKey('User', ...)
class Account(...)
bank = models.ForeignKey('Bank', ...)
user = models.ForeignKey('User', ...)
Я использую DRF и хочу предоставить API-доступ к этим моделям. Я хочу убедиться, что Users
может получить доступ только к своим собственным данным. В наборах представлений я могу ограничить наборы запросов только теми объектами, которыми "владеет" пользователь, следующим образом:
views.py
class BankViewSet(...):
def get_queryset(self):
return self.queryset.filter(
user = request.user
)
И я могу сделать то же самое для Accounts
.
Однако, как я могу запретить пользователю создавать Account
через POST запрос с Bank
, которым он не владеет? Я хочу убедиться, что пользователи могут создавать только Accounts
, принадлежащие Bank
, которыми они владеют.
Как я могу обеспечить/проверить, что Bank
в POST-запросе Account
содержит того же пользователя, что и запрашивающий?
Вы можете создать проверку на уровне поля на классе AccountSerializer
, как
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = (
"bank",
"field_1",
"field_2"
)
def validate_bank(self, bank_instance: Bank):
if bank_instance.user == self.context["request"].user:
return bank_instance
raise serializers.ValidationError("Not belongs to you!!!")