Django用户,用户如何只能编辑他们拥有的模型(DRY)?

时间:2018-05-21 22:27:49

标签: python django django-models django-views mixins

我目前正在创建大量视图,并且在每个视图中,只有用户才有权访问该视图并创建或编辑模型。

根据视图,我在get_context_data或get_object中放置了一个小权限IF语句。

虽然以下工作我想让它更干,因为我有超过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)的内容,但它们似乎适用于我们希望许多用户拥有该权限的情况,而不是检查用户是否具有编辑模型的权限已经创造出来了。

另一种可能性(在我看来)是使用mixins,但我似乎并不了解它们如何工作以及如何实现它们。

我想要实现的目标是:

用户只能创建,更新和删除他们创建的模型,而无需在视图中反复使用相同的代码。

编辑1:根据@ Lemayzeur的评论,创建一个Mixin是最好的方法。任何例子或解释都会非常有用。

0 个答案:

没有答案