gpt4 book ai didi

python - 限制更新方法只能修改请求用户自己的数据?

转载 作者:行者123 更新时间:2023-12-01 04:23:43 24 4
gpt4 key购买 nike

我在 DRF 中有一个更新方法,允许用户更新自己的个人资料。 API端点是PUT /api/users/{id}/其中 id 是他自己的用户 ID。如果他尝试更新任何其他用户的个人资料,他将收到 HTTP403。

我现在的做法是

def update(self, request, *args, **kwargs):
"""
Update user profile
"""
if int(kwargs['id']) is not request.user.id:
return Response({}, status=status.HTTP_403_FORBIDDEN)
return super(UserViewSet, self).update(request, *args, **kwargs)

我希望以更优雅的方式做到这一点,也许使用装饰器或其他东西?

最佳答案

您可以创建一个 CustomUpdatePermission 类,该类将根据网址中的 idrequest.user.id 是否授予对更新请求的访问权限> 匹配与否。

我们将首先检查其是否为更新请求。如果是,我们将使用 request.userid 检查 url 中 id 的值。如果不匹配,请求将不会被授予访问权限,并且将返回 403 Forbidden 响应。

from rest_framework import permissions

class CustomUpdatePermission(permissions.BasePermission):
"""
Permission class to check that a user can update his own resource only
"""

def has_permission(self, request, view):
# check that its an update request and user is modifying his resource only
if view.action == 'update' and view.kwargs['id']!=request.user.id:
return False # not grant access
return True # grant access otherwise

您可以通过定义 permission_classes 设置将此权限类包含在您的 UserViewset 中。

class UserViewSet(viewsets.ModelViewSet):

permission_classes = (CustomUpdatePermission,) # specify custom permission class here
...

关于python - 限制更新方法只能修改请求用户自己的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33400830/

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