1. ホーム
  2. django

[解決済み] コンテンツタイプやモデルを定義せずに Django のパーミッションを使うにはどうしたらいいですか?

2023-01-06 23:56:46

質問

Django アプリケーション内の特定のアクションを制限するために、パーミッションベースのシステムを使用したいと思っています。これらのアクションは特定のモデルに関連する必要はありません (例えば、アプリケーション内のセクションへのアクセス、検索...) ので、私は ストックパーミッションフレームワーク を直接使うことはできません。 Permission モデルはインストールされたコンテンツタイプへの参照を必要とするからです。

独自のパーミッションモデルを書くこともできますが、その場合、Django のパーミッションに含まれる、以下のような良いところを全て書き直さなければなりません。

のようなアプリをいくつか確認しました。 django-authority django-guardian などがありますが、これらはオブジェクト単位のパーミッションを許可することで、モデルシステムにさらに結合したパーミッションを提供しているようです。

モデルを定義することなく、このフレームワークを再利用する方法はありますか? UserGroup を含む) のプロジェクトに適用されますか?

どのように解決するのですか?

Djangoの Permission モデル が必要です。 ContentType インスタンス .

これを回避する一つの方法として、ダミーの ContentType を作成することです。 app_labelmodel フィールドには任意の文字列を設定することができます)。

もし、すべてをきれいにしたいのであれば、次のように Permission プロキシモデル で、ダミーの醜い詳細をすべて処理します。 ContentType のすべての醜い詳細を処理し、"modelless" 権限インスタンスを作成するプロキシモデルです。また、カスタムマネージャーを追加して、すべての Permission インスタンスをフィルタリングするカスタムマネージャーを追加することもできます。