123456789101112131415161718192021222324252627282930313233 |
- from django.dispatch import receiver
- from django.db.models.signals import pre_save
- from django.contrib.auth.models import Permission
- from .models import ServiceType
- @receiver(pre_save, sender=ServiceType)
- def update_user_permissions(sender, instance, raw, **kwargs):
- perms = [
- 'add_user',
- 'change_user',
- 'change_profile',
- 'add_adherent',
- 'change_adherent',
- 'add_payment',
- 'change_payment',
- 'delete_payment',
- 'change_service',
- ]
- try:
- old_group = ServiceType.objects.get(pk=instance.pk).group
- except ServiceType.DoesNotExist:
- old_group = None
- new_group = instance.group
- perms = Permission.objects.filter(codename__in=perms).all()
- if old_group is None and new_group is not None:
- # add permissions to new_group
- new_group.permissions.add(*perms)
- elif old_group is not None and new_group is None:
- # remove permissions from old_group *if not needed elsewhere*
- if not old_group.service_types.exclude(pk=instance.pk).exists():
- old_group.permissions.remove(*perms)
|