obtienen la capacidad de establecer el indicador is_superuser en cualquier cuenta, incluidas las suyas. (!!!)
No sólo esto, sino que también adquieren la capacidad de darse a sí mismos ningún permiso uno por uno, mismo efecto ...
Estoy seguro de que implica la subclasificación de Django .contrib.auth.forms.UserChangeForm
Bueno, no necesariamente. El formulario que se ve en la página de cambio del administrador de django se crea dinámicamente por la aplicación de administración y se basa en UserChangeForm
, pero esta clase apenas agrega validación de expresiones regulares al campo username
.
y enganchándolo en mi objeto UserAdmin ya de por encargo ...
Una costumbre UserAdmin
es el camino a seguir aquí. Básicamente, desea cambiar la propiedad fieldsets
a algo así:
class MyUserAdmin(UserAdmin):
fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
# Removing the permission part
# (_('Permissions'), {'fields': ('is_staff', 'is_active', 'is_superuser', 'user_permissions')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
# Keeping the group parts? Ok, but they shouldn't be able to define
# their own groups, up to you...
(_('Groups'), {'fields': ('groups',)}),
)
Pero el problema aquí es que esta restricción se aplicará a todos los usuarios. Si esto no es lo que desea, podría, por ejemplo, anular change_view
para comportarse de manera diferente según el permiso de los usuarios. Fragmento de código:
class MyUserAdmin(UserAdmin):
staff_fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
# No permissions
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
(_('Groups'), {'fields': ('groups',)}),
)
def change_view(self, request, *args, **kwargs):
# for non-superuser
if not request.user.is_superuser:
try:
self.fieldsets = self.staff_fieldsets
response = super(MyUserAdmin, self).change_view(request, *args, **kwargs)
finally:
# Reset fieldsets to its original value
self.fieldsets = UserAdmin.fieldsets
return response
else:
return super(MyUserAdmin, self).change_view(request, *args, **kwargs)
Que hizo el truco . ¡Gracias por una respuesta tan completa! –
Como uso Grupos para administrar permisos, también eliminé la sección Grupos de 'staff_fieldsets'. –
Gracias! ¡Esto me ayudó mucho! Sin embargo, a Django 1.1.2 no pareció gustarle el "_" que tenías antes de la información personal y el resto. – Tyug