admin: when user is super-admin always keep is_staff to True

This commit is contained in:
Benjamin Dauvergne 2013-09-03 18:36:10 +02:00
parent 27f2b5be00
commit 19f89b3135
1 changed files with 13 additions and 3 deletions

View File

@ -56,9 +56,19 @@ admin.site.unregister(Group)
admin.site.register(models.Role, GroupAdmin)
from authentic2.compat import get_user_model
from django.db.models.signals import m2m_changed
from django.db.models.signals import m2m_changed, pre_save
from django.dispatch import receiver
@receiver(pre_save, sender=get_user_model())
def update_is_staff_for_superuser(sender, instance, raw, using, update_fields,
**kwargs):
'''Super-users have always access to the admin site'''
if raw:
return
if instance.is_superuser:
instance.is_staff = True
if hasattr(get_user_model(), 'groups'):
@receiver(m2m_changed, sender=get_user_model().groups.through)
def update_is_staff(sender, instance, action, reverse, model, pk_set,
@ -67,11 +77,11 @@ if hasattr(get_user_model(), 'groups'):
if action.startswith('post_'):
instance.is_staff = instance.groups \
.filter(permissions__isnull=False) \
.exists()
.exists() or instance.is_superuser
instance.save(update_fields=['is_staff'])
else:
for user in get_user_model().objects.filter(pk__in=pkset):
user.is_staff = user.groups \
.filter(permissions__isnull=False) \
.exists()
.exists() or user.is_superuser
user.save(update_fields=['is_staff'])