【发布时间】:2018-04-27 19:55:37
【问题描述】:
假设我有这样的 URL users/{id}/objects 并且我被验证为 ID 等于 1 的用户。目前我可以访问 ID 等于 2、3 等的用户对象。有谁知道我怎么能防止这种情况发生?
class UserObject(GenericAPIView):
permission_classes = [UserPermission]
def get(self, request, user_id):
try:
object = Object.objects.filter(user=user_id)
except Object.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
serializer = ObjectSerializer(object, many=True)
return Response(serializer.data)
class UserPermission(permissions.BasePermission):
def has_permission(self, request, view):
if request.user and request.user.is_authenticated():
return True
return False
我是这样尝试的:
serializer_class = ObjectSerializer
permission_classes = [IsAuthenticated, ]
def get_queryset(self):
return Object.objects.filter(owner=self.request.user)
def get(self, request, user_id):
try:
object = Object.objects.filter(user=user_id)
except Object.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
serializer = ObjectSerializer(object, many=True)
return Response(serializer.data)
【问题讨论】:
-
在模板中检查id是否== request.user.id
-
在视图中,而是。
-
@mohammedqudah 我用 if
user_id == self.request.user.id:尝试过,但它不起作用。也许可以在GetPermissionClass 中查看? -
@VincentBuscarello 不,只有所有者才能访问这些对象。目前只需要成为用户并经过身份验证,您就可以访问不同用户的所有对象。我想让它可以只访问自己的对象。
-
@VincentBuscarello 我在
def has_permission(self, request, view):下方添加了print("test"),在发送users/1/objects后打印了test
标签: python django python-3.x django-rest-framework django-views