私はdjango restフレームワークでCRUDを持っており、私はパーミッションクラスを使用しているパーミッションを制御しています。 CRUDのために作成したパーミッションクラスを次に示します。これは、更新のためにうまく機能して、削除します。Django Rest Framework - 作成権限
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
私の問題であれば、このクラスでは、私の作成ビューではうまく機能しないこと:
class AssetCreate(generics.CreateAPIView):
"""
Link a new asset
"""
queryset = Asset.objects.none()
serializer_class = AssetSerializer
permission_classes = (permissions.DjangoModelPermissions, LinkAssetPermission,)
がobj.content.delivery.can_change
falseを返し、私が作成、更新またはモデルオブジェクトを削除することはできません。 obj.content.delivery.owner == request.user
でも同じです。ユーザーが所有者である場合にのみ作成、更新、または削除することができます。これはすべて私が更新と削除のために望むように機能します。おそらく私はまだオブジェクトを持っていないので、それは私の質問の中核です。
オブジェクトは作成時に存在し、return False
にはhas_object_permission
としましたが、まだレコードを作成できます。
私は、挿入のための新しい権限クラスを作成する必要がありますか私のビューで何かを変更する必要がありますか? .get_object()
方法はすなわち、特定のリソースがアクセスされている一般的な図で呼び出されるたびに任意の助け
私が意味する、falseを返し、私は新しいレコードを作成することができますobj.content.delivery.can_changeこの方法。私の考えは、このcan_chanceがfalseを返すときです。レコードを作成、更新、削除することはできません。 –
作成時には、 'create'を続ける前に' obj'が存在しません。どのobjを参照していますか? –
実際には、私はデバッグしました。私もhas_object_permissionをfalseに戻そうとしましたが、レコードを作成することができます。 –