使用户权限可以查看数据库条目

时间:2014-06-10 15:26:28

标签: django permissions django-rest-framework

我有一个Django REST Framework后端与数据库交互。在我的应用程序中,我想有一个联系人部分,每个用户可以将自己的联系人添加到数据库,但只能看到他们添加的联系人。就目前而言,我可以从数据库中获得任何经过身份验证的用户POST或GET,但它是一个"集体"数据库,每个用户都可以看到彼此的联系人。但是我无法找到如何我这样做。我看到它的方式我有一些概念性的解决方案,但是我没有完全理解我需要实际添加到我的代码中以使其工作。

这是一个简短的views.py联系人:

@api_view(['GET','POST','DELETE' ])
@permission_classes((IsAuthenticated,))
def contacts_list(request):
  if (request.method == 'GET'):
    contacts = Contact.objects.all()
    contacts_serializer = ContactSerializer(contacts, many=True)
    return Response(contacts_serializer.data)
  elif (request.method == 'POST'):
    //post stuff happens here...
  elif (request.method == 'DELETE'):
    //Delete stuff happens here...

理论解决方案1:为每个联系人添加一个新元素,该联系人属于"属于"标识符。当您提取联系人时,只选择与属于标识符匹配的联系人。

理论解决方案2:创建单独的联系人列表 - 因此当您发布时,您将发布到您自己的列表,当您获得时,您将获得整个列表。

理论解决方案3:找到Django或DRF内置的东西,让它变得更容易......我无法做到的,特别是因为我不知道是什么

1 个答案:

答案 0 :(得分:0)

您的理论解决方案1将是这样做的方法,因为如果您存储创建它的用户,您只能抓取特定用户创建的项目。完成此操作后,您需要按以下步骤更新视图

@api_view(['GET','POST','DELETE' ])
@permission_classes((IsAuthenticated,))
def contacts_list(request):
  if (request.method == 'GET'):
    contacts = Contact.objects.filter(created_by=request.user)
    contacts_serializer = ContactSerializer(contacts, many=True)
    return Response(contacts_serializer.data)
  elif (request.method == 'POST'):
    //post stuff happens here...
  elif (request.method == 'DELETE'):
    //Delete stuff happens here...