Ich habe eine CRUD in Django Rest Framework und um die Berechtigungen zu steuern Ich benutze Berechtigungsklassen. Hier ist die Berechtigungsklasse, die ich für CRUD erstellt habe. Das funktioniert gut für aktualisieren und löschen:Django Rest Framework - Berechtigung zum Erstellen
class LinkAssetPermission(permissions.BasePermission):
message = 'Link access not allowed.'
def has_object_permission(self, request, view, obj):
return obj.content.delivery.owner == request.user and obj.content.delivery.can_change
Mein Problem, wenn, dass diese Klasse funktioniert nicht gut für meine erstellen Ansicht:
class AssetCreate(generics.CreateAPIView):
"""
Link a new asset
"""
queryset = Asset.objects.none()
serializer_class = AssetSerializer
permission_classes = (permissions.DjangoModelPermissions, LinkAssetPermission,)
Wenn obj.content.delivery.can_change
false zurück kann ich nicht erstellen, aktualisieren oder Modellobjekte löschen . Das Gleiche gilt für obj.content.delivery.owner == request.user
. Ich kann nur erstellen, aktualisieren oder löschen, wenn der Benutzer der Besitzer ist. All das funktioniert so, wie ich es für das Update und das Löschen benötige, nur um zu erstellen, dass es nicht funktioniert. Wahrscheinlich, weil ich das Objekt noch nicht habe, das ist der Kern meiner Frage.
Das Objekt existiert beim Erstellen und ich habe auch versucht, nur return False
um has_object_permission
und ich kann immer noch den Datensatz erstellen.
Sollte ich eine neue Berechtigungsklasse für die Einfügung erstellen oder sollte ich etwas in meiner Sicht ändern?
Danke für jede Hilfe
Ich meine, diese Methode obj.content.delivery.can_change false zurück, und ich kann einen neuen Datensatz erstellen. Meine Idee ist, wenn diese can_chance falsch zurückgibt, keine Datensätze erstellt, aktualisiert oder gelöscht werden können –
Zum Zeitpunkt der Erstellung gibt es kein 'obj' vor dem Fortfahren mit' create'. Auf welches "obj" beziehen Sie sich? –
Eigentlich gibt es, ich habe debugged. Ich habe auch versucht, nur die has_object_permission falsch zurückzugeben und ich kann immer noch den Datensatz erstellen –