我正在學習Django,並且已經學到了更高級的主題。你可以做的是在你的permissions.py文件中爲此創建一個函數。像這樣:
from rest_framework import permissions
class specialMobileUserPermissions(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in request.SAFE_METHODS:
return True
if request.user.id == whatever your mobile users id is:
return false
return obj.id == request.user.id # if the user is a subscribed user and they are logged in return true
return false # because we need a way out if none of the above works
因此,與權限類打交道時的permissions.SAFE_PERMISSIONS是,非破壞性的權限列表。所以第一個if語句會問你是GET,HEAD還是其他非數據改變方法。如果是這樣,則返回true
第二個if語句檢查發出請求的用戶的用戶標識。如果該用戶標識等於您爲移動路徑用戶設置的用戶標識,則它將返回false,拒絕對該類使用的任何權限。
在您的視圖集中,您將需要添加permissions_classes變量像下面
from . import permissions # your permissions.py file
class FooViewSet(viewsets.ViewSet):
permission_classes = (permissions.specialMobileUserPermissions,)
除非你需要額外的功能,這應該是你需要的一切,下降到進口的所有道路。我希望我能幫上忙。
感謝Joshua,所以爲了我的理解,我必須創建一種移動ID,只允許未登錄的用戶使用SAFE_METHODS,但如果我想讓他們能夠發表一些帖子,我將不得不提供一種祕密加密的移動身份證以保證其安全或不建議這樣做? –
該id是用戶數據庫的主鍵,因此您需要讓您的移動試用用戶並獲取其主鍵(該用戶的id),並將第二個if語句更改爲 if obj.id = = id: –