Also ich habe ein Modell, dass ich eine PATCH
über eine Sicht mache, die unter Umständen mein Objekt so mutieren kann, dass der Anrufer nicht darf um es weiter zu mutieren.Ist es möglich, Berechtigungen während einer Anfrage zu behalten?
Meine Erlaubnis Klasse sieht ungefähr so aus:
class MyPermission(BasePermission):
def has_object_permission(self, request, view, obj):
if request.user.has_perm("can_change_when_not_done") and obj.status != "done":
return True
return super(MyPermission, self).has_object_permission(request, view_obj)
Dies funktioniert wie erwartet.
Es scheint jedoch, dass, wenn ich das Objekt "fertig" patch (zB {'status': 'done'}
in der Nutzlast), passiert es durch einen Serializer auf dem Weg zurück, die eine andere Berechtigungsprüfung, die eine 403 ergibt, seit der Objekt ist jetzt "fertig". Ich möchte immer noch eine 200 und eine serialisierte Ansicht von dem, was das Objekt jetzt aus dieser Anfrage aussieht. Zukunft mutiert Anforderungen in einer 403.
Einstellen des Objekts zu schreibgeschützt unter „sicheren“ Methoden führen sollte (zum Beispiel GET
) tut nicht Hilfe, da der ursprüngliche Antrag ist immer noch ein PATCH
.
Gibt es einen einfachen Weg, um das zu erreichen, was ich will, oder nähere ich mich diesem Fehler?