Je cherche à limiter les possibilités des utilisateurs standards dans l'application User
de l'admin de Django, afin d'éviter la possibilité d'une élévation de privilèges.
J'ai essayé l'approche mentionnée dans la documentation : https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_form
class UserAdmin(BaseUserAdmin):
form = UserForm
inlines = (UserProfileInline,)
def get_form(self, request, obj=None, **kwargs):
if request.user.is_superuser:
kwargs["form"] = SuperUserForm
return super().get_form(request, obj, **kwargs)
class UserForm(ModelForm):
class Meta:
model = User
exclude = ("is_superuser",) # c'est juste un exemple
class SuperUserForm(ModelForm):
class Meta:
model = User
fields = "__all__"
Malheureusement, cela entraîne une telle erreur :
"Clé 'is_superuser' non trouvée dans 'UserForm'. Les choix sont: date_joined, email, first_name, groups, is_active, is_staff, last_login, last_name, password, user_permissions, username."
Si je décidais d'exclure "groups" :
"Clé 'groups' non trouvée dans 'UserForm'. Les choix sont: date_joined, email, first_name, is_active, is_staff, is_superuser, last_login, last_name, password, user_permissions, username."