gpt4 book ai didi

python - DRF get_permissions 似乎无法正常工作

转载 作者:行者123 更新时间:2023-12-05 07:31:26 26 4
gpt4 key购买 nike

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

  • 任何人都可以创建一个新的User实例
  • 只有所有者或管理员可以检索更新用户

出于某种原因,当我在类中定义 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

这可能是什么问题?

最佳答案

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)

关于python - DRF get_permissions 似乎无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51804042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com