Django избыточное отношение пользователей в связанных моделях для целей разрешения
Я довольно новичок в django и backend, я сделал две модели Car & Service которые имеют отношение к пользователю (для проверки прав доступа, при работе с ними) и теперь я пытаюсь связать одну с другой, я заметил, что они обе имеют отношение к пользователю, но Сервис не может существовать без Car, поэтому я начал задаваться вопросом, есть ли смысл иметь отношение к пользователю в Сервисе только для целей прав доступа, или лучше создать отдельные права доступа для каждой модели:
Модель автомобиля:
class Car(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.ForeignKey(User, on_delete=models.CASCADE)
...
и Режим обслуживания:
class Service(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=200)
car = models.ForeignKey(
"cars.Car",
on_delete=models.CASCADE,
related_name="services",
)
и разрешение, используемое в обоих представлениях API для этих моделей:
class isAuthorOrReadOnly(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return obj.user == request.user
Что бы вы посоветовали в этом случае?
Это больше дизайнерский, чем технический вопрос. Если в вашем приложении Service не может существовать без Car, то атрибут Service.user является лишним. Тогда вы можете переписать проверку разрешения на что-то вроде этого:
class isAuthorOrReadOnly(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
elif isinstance(obj, Car):
return obj.user == request.user
elif isinstance(obj, Service):
return obj.car.user == request.user