11

状況は非常に単純です。私はマルチユーザー ブログ システムを書いています。システムは、所有者以外がブログ投稿を編集または削除できないようにする必要があります。私の見解では、一般的なビューを使用しています。

クラス BlogUpdateView(UpdateView): ...

@method_decorator を使用してディスパッチ メソッドを装飾する必要があることはわかっています。ただし、ほとんどの例は @method_decorator(login_required) またはモデル レベルの権限です。request.user がこのブログ投稿の作成者であるかどうかを確認するためにオブジェクト レベルのアクセス許可を適用するにはどうすればよいですか? たとえば、django-authority アプリを使用しようとしましたが、このファイルに BlogPermission クラスがあります。そして、このクラスでメソッドを定義しようとしました。

def blog_edit(self, ??, ??)

このメソッドには何を入れるべきですか?

そして、これを次のように呼び出します。 @method_decorator(permission_required('blog_permission.blog_edit(???)'))

ここには何を渡す必要がありますか?

更新: method_decorator コードを読んだ後、引数なしの関数しか受け入れられないことがわかりました。それが、permission_required がここで機能しない理由だと思います。しかし、これについての回避策は何ですか?

ソリューションの更新:

ディスパッチ メソッドでは、ユーザーのパーミッションを確認し、ユーザーがパーミッションを満たしていない場合は HttpResponseForbidden() を返します。

4

2 に答える 2