7

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)

Django の標準パーミッションを使用して、追加、変更、削除のいずれかを選択できるようになりました。必要なのは、拡張された変更パーミッションです。たとえば、ロゴを変更するためだけにグループに権限を与える機能を提供しますが、同じグループは許可しません。アイテムの説明を変更します。ユーザーが関係を入力する必要はありませんが、標準の管理インターフェイスを使用してモデルの単一フィールドを編集する可能性をさまざまなグループに与えるだけです。オブジェクトごとの許可について話しているかどうかさえわかりませんか?

何を使用するのが最適か、または自分で実装する方法を知っている人はいますか? また、すべてにアクセス/読み取りできるが変更できない読み取り専用ユーザーがいると想像することもできます。これも不可能です。

助けてくれてありがとう。

4

3 に答える 3

7

最も柔軟ですが、方法は次のとおりです。

  1. いくつかのカスタム権限を書く(すなわちcan_modify_descr
  2. 独自のFormまたはModelFormを作成する
  3. ビューを記述して、指定したフォームをレンダリングします。
  4. 最後に、いくつかの django 管理テンプレートをオーバーライドし、標準の django 管理テンプレートを拡張するテンプレートでフォームをレンダリングする必要があります。

私が見る限り、これはあなたが望むものを達成する唯一の方法ですが、多くの作業も必要です.

于 2012-01-25T14:13:12.807 に答える
1

これを実現する簡単な方法の1つは、同じモデルに対して多数のModelAdminを作成することです(「グループ」ごとに1つ)。これを行うには、次のように「グループ」ごとに1つのプロキシモデルを作成する必要があります。

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')

ItemGroup1次に、グループ1の権限を設定して、などにのみアクセスできるようにする必要があります。

詳細については、この投稿を参照してください:プロキシモデルを使用したDjango管理者のカスタマイズ

于 2012-01-25T17:44:58.520 に答える