Django Rest Framework 权限检查创建

cde*_*win 6 django django-rest-framework django-guardian

为什么 django rest 框架在创建对象时不检查对象权限?用户应该能够创建他们无法看到、更新或删除的对象是没有意义的(无论如何对我来说)。目前我子类化了一个视图集

class CheckCreatePermissionsViewSet(ModelViewSet):
    def perform_create(self, serializer):
    '''
    Called by create before calling serializer.save()
    '''
    obj = serializer.save()
    try:
        self.check_object_permissions(obj)
    except:
        obj.delete()
        raise
Run Code Online (Sandbox Code Playgroud)

为什么默认情况下不实现?这让我很头疼,我想不出它会像这样实施的单一原因。

Kav*_*raj 0

如果您的目的是在用户没有特定权限的情况下不创建对象,您可以在 Viewset 中使用 Permission_classes,这样 Viewset 甚至不允许用户创建对象。

为什么需要根据权限创建然后再次删除?最好先检查权限,这样如果权限失败,对象甚至不会被创建。

例如,您只希望管理员创建对象,您可以添加 permission_classes=[permissions.IsAdminUser]到视图集,这样该控件甚至不会进入perform_create。如果普通用户尝试创建对象,Viewset 将发送 403。希望这是您想要的。