Toute personne capable d'exécuter python manage.py createsuperuser
devrait pouvoir exécuter python manage.py dbshell
et créer le super utilisateur manuellement dans la base de données. Donc, cela devrait être une personne de confiance de toute façon.
Si seules les personnes de confiance peuvent ajouter des superutilisateurs, dites-leur simplement de ne pas créer plusieurs super-utilisateurs (bien que je me demande quel est le but de limiter à un seul super-utilisateur).
Cependant, si vous voulez éviter de créer plus d'un super-utilisateur par erreur avec python manage.py createsuperuser
, vous pouvez override this command:
from django.contrib.auth.management.commands import createsuperuser
from django.core.management.base import CommandError
class Command(createsuperuser.Command):
def handle(self, *args, **options):
if self.UserModel.objects.filter(is_superuser=True).exists():
raise CommandError("There is no room for two, go your way!")
super().handle(*args, **options)
Notez que cela n'empêchera pas de fixer un utilisateur comme étant un super-utilisateur de django interface d'administration.
Si vous voulez complètement rendre impossible la création de deux super-utilisateurs, vous pouvez directement ajouter la contrainte au niveau de la base de données.
Une autre façon de le faire serait de sous-classe django.contrib.auth.models.User
et définir:
SUPERUSER_ID = 1 # or whatever
@property
def is_superuser(self):
return self.id == self.SUPERUSER_ID
Qui a accès à la console? Et 'createsuperuser' est _not_ le seul moyen de créer un super-utilisateur. – Selcuk
Quelle est l'intention réelle ici? De qui voulez-vous protéger? Notez que vous pouvez créer un super-utilisateur à partir de 'manage.py shell', ou directement dans la base de données. – Koterpillar