hanno la possibilità di impostare il flag is_superuser su qualsiasi account, incluso il proprio. (!!!)
Non solo questo, ma anche acquisire la capacità di darsi le autorizzazioni one-by-one, stesso effetto ...
Sono sicuro che si tratta di sottoclasse django .contrib.auth.forms.UserChangeForm
Bene, non necessariamente. Il modulo che vedi nella pagina di modifica dell'amministratore di django viene creato dinamicamente dall'applicazione di amministrazione e basato su UserChangeForm
, ma questa classe aggiunge a malapena la convalida di espressioni regolari al campo username
.
e agganciandolo nella mia oggetto UserAdmin già-custom ...
Una consuetudine UserAdmin
è il modo di andare qui. In sostanza, si vuole modificare la proprietà fieldsets
a qualcosa di simile:
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',)}),
)
Ma il problema qui è che questa limitazione si applicherà a tutti gli utenti. Se questo non è ciò che desideri, potresti ad esempio sostituire lo change_view
in un comportamento diverso a seconda dell'autorizzazione degli utenti. Frammento di codice:
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)
Che ha fatto il trucco . Grazie per una risposta così completa! –
Dato che utilizzo i gruppi per gestire le autorizzazioni, ho rimosso anche la sezione Gruppi da 'staff_fieldsets'. –
Grazie! Questo mi ha aiutato molto! Tuttavia, Django 1.1.2 non sembrava gradire il "_" che avevi prima delle informazioni personali e il resto. – Tyug