Ich möchte sicherstellen, dass der request.user nur eine POST-Anfrage erstellen kann, um ein Forum Thema zu erstellen, in dem sie der Autor sind. Mit PUT und DELETE kann ich das erreichen, indem ich die has_object_permission
benutze, aber mit POST kann ich das nicht, ich schätze, weil das Objekt noch nicht erstellt wurde.Django Rest Framework-Objekt-Level-Berechtigung für POST
class TopicPermission(IsAuthenticatedOrReadOnly):
"""
Any user should be able to read topics but only authenticated
users should be able to create new topics. An owner or moderator
should be able to update a discussion or delete.
"""
def has_object_permission(self, request, view, obj):
if request.method in SAFE_METHODS:
return True
# Instance must have an attribute named `author` or moderator
return obj.author == request.user or request.user.forum_moderator
Wie würde ich über gehen request.user == obj.author
in POST-Anfragen zu überprüfen?
Haben Sie eine 'author' Feld auf dem Serializer, dass Sie, um sicherzustellen, versuchen, den aktuellen Benutzer gesetzt, wenn die cresting Objekt? Dafür gibt es bessere Möglichkeiten als eine Berechtigungsprüfung. –
Ja, darum geht es nicht. Es funktioniert gut für PUT und DELETE, aber mit POST has_object_permission funktioniert nicht. – awwester
Mit "funktioniert nicht" meinst du "wird nicht aufgerufen", "löst einen Fehler aus" oder "geht niemals"? Es ist nicht klar, was Sie in Ihrer Frage zu tun versuchen, und es [riecht wie ein XY-Problem] (http://meta.stackexchange.com/q/66377/159034). –