Пользователи Django, как пользователь может иметь разрешение на редактирование только своих моделей (DRY)? - PullRequest
0 голосов
/ 22 мая 2018

В настоящее время я создаю много видов, и на каждом из них только Пользователь имеет права доступа к этому виду, а также к созданию или редактированию модели.

В зависимости от представления я либо помещаю небольшой оператор разрешения IF в get_context_data, либо в get_object.

Хотя следующее работает, я хотел бы сделать его более СУХИМЫМ, так как мне нужно более 20 представлений:

def get_context_data(self, **kwargs):
        context = super(SpaceCreate, self).get_context_data(**kwargs)
        house = House.objects.get(pk=self.kwargs['pk'])
        # CHECK IF USER HAS PERMISSION TO MAKE CHANGES TO THE MODEL
        if house.owner != self.request.user:
            raise PermissionDenied

или в get_object (), и с дополнительными проверками разрешений:

def get_object(self, *args, **kwargs):
        obj = super(SpaceManage, self).get_object()
        house = House.objects.get(pk=self.kwargs['pk'])
        space = Space.objects.get(pk=self.kwargs['space_pk'])
        if space.house.owner != self.request.user and house.pk != space.house.pk:
            raise PermissionDenied
        return space

Несмотря на то, что я много читал о создании разрешений (https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Authentication), они, похоже, применимы в тех случаях, когда мы хотим, чтобы у многих пользователей было это разрешение вместо проверки, если пользовательимеет разрешение на редактирование моделей, которые они создали.

Другая возможность (на мой взгляд) - использование миксинов, но я не понимаю, как они работают и как их реализовывать.

Я пытаюсь достичь:

Пользователь может создавать, обновлять и удалять только созданные им модели, без повторного использования одного и того же кода.снова и снова в представлениях.

РЕДАКТИРОВАТЬ 1: Основываясь на комментариях @ Lemayzeur, создание Mixin является лучшим подходом для этого.Любые примеры или объяснения были бы очень полезны.

...