Meilleure interface admin
- Les super utilisateurs peuvent gérer les permissions - Les chefs fanfare ont par défaut les permissions pour éditer les utilisateurs (avec leur profil) et les événements. Ils ne peuvent rien ajouter ou supprimer par ce biais. Pour créer des utilisateurs ou événements il faut passer par les formulaires adéquats sur le site.
This commit is contained in:
parent
6b67f8b779
commit
e57dd68176
1 changed files with 65 additions and 16 deletions
|
@ -1,11 +1,20 @@
|
|||
"""
|
||||
Administration minimaliste du site de l'Ernestophone.
|
||||
Les chefs peuvent modifier les utilisateurs et les événements.
|
||||
Les super-utilisateurs peuvent en plus ajouter ou supprimer ces objets et gérer
|
||||
les permissions.
|
||||
"""
|
||||
|
||||
from django.contrib import admin
|
||||
from django.contrib.auth.models import User, Group
|
||||
from gestion.models import ErnestoUser
|
||||
from django.contrib.auth.models import User, Group, Permission
|
||||
from django.contrib.auth.admin import UserAdmin
|
||||
|
||||
from gestion.models import ErnestoUser
|
||||
from calendrier.models import Event
|
||||
|
||||
|
||||
class UserProfileInline(admin.StackedInline):
|
||||
"""Affichage du profil ernestophone dans la vue UserAdmin"""
|
||||
model = ErnestoUser
|
||||
|
||||
|
||||
|
@ -27,23 +36,63 @@ User.profile_get_mails = ProfileInfo("mails", "Recevoir les mails")
|
|||
|
||||
|
||||
class UserProfileAdmin(UserAdmin):
|
||||
list_display = ('username', 'first_name', 'last_name', 'email',
|
||||
"""
|
||||
Management des utilisateurs de l'ernestosite.
|
||||
Lors de la sauvegarde, les chefs se voient octroyées les permissions
|
||||
d'édition des comptes et événements mais il ne peuvent pas en créer via
|
||||
l'interface admin.
|
||||
"""
|
||||
list_display = ['username', 'first_name', 'last_name', 'email',
|
||||
'profile_phone', 'profile_instru', 'profile_is_ern',
|
||||
'profile_is_chef',)
|
||||
list_display_links = ('username', 'email', 'first_name', 'last_name',)
|
||||
list_filter = ('profile__instru',)
|
||||
ordering = ('username',)
|
||||
search_fields = ('username', 'first_name', 'last_name', 'profile__phone',
|
||||
'profile__instru',)
|
||||
inlines = [UserProfileInline, ]
|
||||
fieldsets = (('Général', {'fields': ('username', 'password', 'first_name',
|
||||
'last_name', )}),
|
||||
('Permissions', {'fields': ('is_active', 'is_staff',
|
||||
'is_superuser')}))
|
||||
'profile_is_chef']
|
||||
list_display_links = ['username', 'email', 'first_name', 'last_name']
|
||||
list_filter = ['profile__instru']
|
||||
ordering = ['username']
|
||||
search_fields = ['username', 'first_name', 'last_name', 'profile__phone',
|
||||
'profile__instru']
|
||||
inlines = [UserProfileInline]
|
||||
|
||||
staff_fieldsets = [
|
||||
('Général', {'fields': ['username', 'password', 'first_name',
|
||||
'last_name']}),
|
||||
('Permissions', {'fields': ['is_active']})
|
||||
]
|
||||
|
||||
def get_fieldsets(self, request, user=None):
|
||||
"""
|
||||
Les super utilisateurs ont toutes les infos.
|
||||
Les autres (e.g. les chefs) ne peuvent modifier qu'un nombre restreints
|
||||
de choses.
|
||||
"""
|
||||
if not request.user.is_superuser:
|
||||
return self.staff_fieldsets
|
||||
return super(UserProfileAdmin, self).get_fieldsets(request, user)
|
||||
|
||||
def save_model(self, request, user, form, change):
|
||||
"""
|
||||
Ajoute le chef au group Chef.
|
||||
Le groupe est créé si nécessaire.
|
||||
"""
|
||||
chef_group, created = Group.objects.get_or_create(name="Chef")
|
||||
if created:
|
||||
# Si le groupe vient d'être créé :
|
||||
# On associe les bonnes permissions au groupe Chef
|
||||
perms = [('change_user', 'auth', 'user'),
|
||||
('change_event', 'calendrier', 'event'),
|
||||
('change_ernestouser', 'gestion', 'ernestouser')]
|
||||
for nat_key in perms:
|
||||
perm = Permission.objects.get_by_natural_key(*nat_key)
|
||||
chef_group.permissions.add(perm)
|
||||
# On met tous les chef dans le groupe
|
||||
chef_group.user_set = User.objects.filter(profile__is_chef=True)
|
||||
# Les chefs sont dans le groupe Chef
|
||||
if user.profile.is_chef:
|
||||
print("J'aime la choucroute")
|
||||
user.is_staff = True
|
||||
user.groups.add(chef_group)
|
||||
user.save()
|
||||
|
||||
|
||||
admin.site.unregister(User)
|
||||
admin.site.unregister(Group)
|
||||
admin.site.register(User, UserProfileAdmin)
|
||||
admin.site.register(Event)
|
||||
# Register your models here.
|
||||
|
|
Loading…
Reference in a new issue