signals.py 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. from django.dispatch import receiver
  2. from django.db.models.signals import pre_save
  3. from django.contrib.auth.models import Permission
  4. from .models import ServiceType
  5. @receiver(pre_save, sender=ServiceType)
  6. def update_user_permissions(sender, instance, raw, **kwargs):
  7. perms = [
  8. 'add_user',
  9. 'change_user',
  10. 'change_profile',
  11. 'add_adherent',
  12. 'change_adherent',
  13. 'add_payment',
  14. 'change_payment',
  15. 'delete_payment',
  16. 'change_service',
  17. ]
  18. try:
  19. old_group = ServiceType.objects.get(pk=instance.pk).group
  20. except ServiceType.DoesNotExist:
  21. old_group = None
  22. new_group = instance.group
  23. perms = Permission.objects.filter(codename__in=perms).all()
  24. if old_group is None and new_group is not None:
  25. # add permissions to new_group
  26. new_group.permissions.add(*perms)
  27. elif old_group is not None and new_group is None:
  28. # remove permissions from old_group *if not needed elsewhere*
  29. if not old_group.service_types.exclude(pk=instance.pk).exists():
  30. old_group.permissions.remove(*perms)