2012-01-25 6 views
7

私はDjangoプロジェクトでより詳細な許可を得たいと思っていますが、どのアプリを使用するかを決めることはできません。 私が持っていることのようなものされています。今、私は間、変更の追加と削除を選択する可能性を持っているDjangoの標準権限で、私が持っていると思いますが与える能力を提供するために、拡張された変更の許可Django権限

class Item(models.Model): 
    name = models.CharField(max_length=64, unique=True) 
    description = models.CharField(max_length=128, default='') 
    logo = ImageField(upload_to=/tmp, blank=True, null=True) 

です例えばロゴを変更するためだけのグループ権限を持ちますが、同じグループがアイテムの説明を変更することはできません。私は、ユーザーに関係を登録する必要はなく、標準の管理インターフェースを使用してモデルの単一フィールドを編集するために、異なるグループに可能性を与えるだけです。私はオブジェクトごとの許可について話しているのかどうかもわかりません。

誰にでも最高のものを知っていますか、それとも私が自分でそれを実装するかは誰でも知っていますか?私はまた、すべてのものにアクセスしたり読むことができるが、変更することができない読み取り専用ユーザーを持つことを想像することもできますが、これはどちらも可能ではありません。

ありがとうございました。最も柔軟性が、方法がすることです

+0

いいえ、これらはオブジェクトレベルのアクセス許可ではありません。短い答え:実行可能かもしれないが、それはたくさんのコードだ。長い答え:あなたはバニラのジャンゴの管理者で説明していることをすることはできません。 1つのアプローチは、別々のModelAdminを関連するフィールドに接続して、AdminSiteインスタンスを分離できるようにすることです。おそらく、AdminSiteをサブクラス化してあなたのグループをチェックし、各グループの権限をハードコードする必要があると思います.djangoの組み込みパーミッションには、許可/禁止フィールドの概念がありません。 – AdamKG

+0

お返事ありがとうございます。私は、私の仕事を達成するために別々のAdminSiteサブクラスを実装することを楽しみにしています。 – tinti

答えて

7

  1. 一部custom permissions(すなわちcan_modify_descr
  2. を書くには、あなたの指定したフォームをレンダリングするためにyur独自FormsまたはModelForms
  3. 書き込みビューを作成します。
  4. 最後にoverride some django admin templatesにして、extend some standard django admin templatesというテンプレートのフォームをレンダリングする必要があります。

私が見る限り、これは欲しいものを達成する唯一の方法ですが、多くの作業も必要です。

+0

ありがとう、あなたはまた、AdamKGによって記述された方法でそれを行うことができます。カスタムビューと対応するテンプレートがないため、この方法はずっと簡単です。 – tinti

1

これを実現する簡単な方法の1つは、同じモデル(各 "グループ"に1つ)に対して多くのModelAdminを作成することです。

models.py

class Item(models.Model): 
    name = models.CharField(max_length=64, unique=True) 
    description = models.CharField(max_length=128, default='') 
    logo = ImageField(upload_to=/tmp, blank=True, null=True) 

class ItemGroup1(Item): 
    class Meta: 
     proxy = True 

admin.py

class ItemAdmin(models.ModelAdmin): 
    ... 

class ItemGroup1Admin(models.ModelAdmin): 
    readonly_fields = ('logo', 'description') 

そしてあなただけの必要があります:あなたは、このような各 "グループ" の1 Proxy Modelsを作成する必要があることを行うために、グループ1のアクセス許可をItemGroup1などにしかアクセスできないように設定するには

詳細はこの記事を参照してください:Using Proxy Models to Customize the Django Admin

0

あなたのadminサイトを越えたこの種のものを処理したい場合は、django-logical-rulesを見てみましょう、あなたはPythonであなたのルールを記述し、ビューからまたはテンプレート内でそれらにアクセスできる場所;