I have a django site with a large customer base. I would like to give our customer service department the ability to alter normal user accounts, doing things like changing passwords, email addresses, etc. However, if I grant someone the built-in auth | user | Can change user permission, they gain the ability to set the is_superuser flag on any account, including their own. (!!!)
What’s the best way to remove this option for non-superuser staff? I’m sure it involves subclassing django.contrib.auth.forms.UserChangeForm and hooking it into my already-custom UserAdmin object… somehow. But I can’t find any documentation on how to do this, and I don’t yet understand the internals well enough.
Not only this, they also gain the ability to give themselves any permissions one-by-one, same effect…
Well, not necessarily. The form you see in the change page of django’s admin is dynamically created by the admin application, and based on
UserChangeForm, but this class barely adds regex validation to theusernamefield.A custom
UserAdminis the way to go here. Basically, you want to change thefieldsetsproperty to something like that :But the problem here is that this restriction will apply to all users. If this is not what you want, you could for example override
change_viewto behave differently depending on the permission of the users. Code snippet :