django rest framework(v3.4.6)オブジェクトレベルの権限を使用していますか?しかし、私はいくつかを理解することはできません。私は明示的に確認する必要があることを読んで最初の好奇心の部分を開始しDjango RESTフレームワークが不要な権限をチェックします
class Works4Shop(BasePermission):
def has_object_permission(self, request, view, obj):
profile = request.user.profile
if obj.shop in profile.shops.all():
return True
else:
return False
私は、今、新しいカスタムビュークラスShopItemsView(APIView)
にpermission_classes = (Works4Shop,)
を追加しました:まず、私は、ユーザーが特定の店のために働くかどうかを確認するカスタム権限を作成しましたオブジェクトレベルのアクセス許可はself.check_object_permissions(request,obj)
を呼び出して行います。しかし、私が見ているのは、モデルマネージャを介してオブジェクトを取得すると、取得されたオブジェクトに対してポリシーが適用されるということです。まあ正確には、それはhas_object_permission(self, request, view, obj)
を呼び出しますが、結果は無視されます。問題はパフォーマンスです。このようなことは、多くの不必要なDB選択を作成します。誰もこれを説明できますか?私はDBからログを投稿することもできます。
。なぜあなたは 'profile = UserProfile.objects.get(user = request.user)'と 'profile = request.user.profile'の両方を使ってプロファイルを割り当てているのか説明できますか?私は両方の必要性が見えません – rrmerugu
私の理解では、オブジェクトレベルのアクセス許可は、返されたすべてのオブジェクトがこの許可条件を満たすかどうかをチェックするように設計されています。たぶんあなたは通常の 'has_permission()'だけを要求します。これはリクエストごとに1回チェックされますか? – serg
@rrmeruguそれはコードのコピー中に私の部分で間違いでした。プロフィールを取得するためにさまざまな方法を試していました。 – mrangry777