我正在爲使用HyperlinkeRelatedFields等的超鏈接序列化程序實現自定義權限類。Django Rest POST對象的框架權限
的檢查是非常粗略:
def has_permission(self, request,view):
if request.method in permissions.SAFE_METHODS:
return True
if not request.user.is_authenticated():
return False
if request.user.is_staff:
return True
# POST: 'author' is a URL due to serializer being Hyperlinked
# meaning we have to translate URL to model (like the serializer)
# to perform the check
if url_to_user(request.DATA['author']) == request.user:
return True
鑑於該代碼的註釋,好像它可能是最好有串行驗證過程中做此項檢查,儘管這將轉移的擔憂。這幾乎就像驗證類需要一個在調用save()之前傳遞新對象的方法來檢查POST/PUT從權限角度來看是可以接受的,而不是通過HTTP /權限相關檢查來驗證序列化程序。
url_to_user是序列化特定的,並且檢查序列化器的驗證器部分將是request/http特定的,而不僅僅是對新模型的完整性/完整性檢查。
這似乎是一個普遍的事情,我很好奇哪些路線的其他人採取了,如果有一個「更正確」的方法,我失蹤了。
在此先感謝。