8

django admin には、4 人のユーザーと 1 人のスーパー ユーザーがいます。アクセスが制限され、ユーザーを削除/表示/編集できないスタッフ ステータスのユーザーがいますが、管理者は他のすべてのユーザーとモデルに対する権限を持っています。スーパーユーザーがユーザーデータにアクセスして編集/変更/削除できるようにしたいのですが、スーパーユーザーが自分自身を削除できるようにしたくありません。現在、スーパーユーザーは自分自身を削除できます。ジャンゴでスーパーユーザーの削除を自分で無効にする方法はありますか?? どんな助けでも感謝します。

ありがとう

4

2 に答える 2

13

変更リストから削除アクションを実行するときにすべてのオブジェクトで呼び出されるわけではないため、 has_delete_permission() オーバーライドは使用しないでください。

信号を使用してそれを行います。これを任意の models.py に追加します

from django.db.models.signals import pre_delete
from django.dispatch.dispatcher import receiver
from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied

@receiver(pre_delete, sender=User)
def delete_user(sender, instance, **kwargs):
    if instance.is_superuser:
        raise PermissionDenied

この方法の唯一の欠点は、誰もスーパー ユーザーを削除できないことです。削除する前に、ユーザー属性「is_superuser」を False に設定する必要があります。

于 2013-08-28T13:04:33.183 に答える