DRF get_permissions似乎无法正常工作

时间:2018-08-11 21:52:17

标签: python django permissions django-rest-framework

我正在尝试为自定义User模型配置权限,并且正在使用Viewset为该模型运行CRUD操作。根据操作,我需要设置不同的权限要求,例如:

  • 任何人都可以create新的User实例
  • 只有所有者或管理员可以retrieveupdate用户

由于某种原因,当我在类中定义get_permissions方法时,就像这样:

def get_permissions(self):
    if self.action == 'create':
        return [AllowAny(),]

    elif self.action == 'me':
        return [IsAuthenticated(),]

    return [IsAuthenticated(), IsOwnerOrAdmin()]

但是当我导航到/api/v1/users/时,DRF资源管理器没有显示用于创建新User的表单,并给了我403错误。另一方面,当我注释掉此函数时,我可以正确查看表单,但显然不能那样使用。

作为参考,我的自定义IsOwnerOrAdmin权限类如下:

class IsOwnerOrAdmin(permissions.BasePermission):

    @staticmethod
    def _is_admin(request):
        return request.user.is_superuser

    def has_permission(self, request, view):
        try:
            is_owner = str(request.user.id) == view.kwargs.get('pk')

            return is_owner or self._is_admin(request)

        # if request.user.uuid is not there (i.e. AnonymousUser)
        except AttributeError:
            return False

这里可能是什么问题?

1 个答案:

答案 0 :(得分:0)

class IsOwnerOrAdmin(BasePermission):
    @staticmethod
    def _is_admin(request):
        return request.user.is_superuser

    def has_object_permission(self, request, view, obj):
        return obj == request.user or self._is_admin(request)