digitaleagenturnc/users/signals.py

44 lines
1.7 KiB
Python

from django.db.models.signals import post_save, pre_delete, m2m_changed
from django.contrib.auth.models import User, Group
from django.dispatch import receiver
from .models import Profile, Agency, AgencyGroup
from django.contrib.auth.models import Permission
# SIGNALS FOR USER
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance, agency=instance.agency, parent=instance.parent)
'''
Wenn ein neuer Nutzer angelegt wird und dies der erste der Agentur ist,
erhält dieser automatisch alle verfügbaren Rechte!
'''
user_agency = User.objects.filter(profile__agency__pk=instance.agency.pk)
if len(user_agency) == 1:
tempuser = user_agency[0]
temprof = Profile
for ele in temprof._meta.permissions:
tempperm = Permission.objects.get(codename=ele[0])
tempuser.user_permissions.add(tempperm)
#tempuser.profile.func = 'lead'
tempuser.save()
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
instance.profile.save()
# SIGNALS FOR GROUPS
@receiver(signal=m2m_changed, sender=User.groups.through)
def adjust_group_notifications(instance, action, reverse, model, pk_set, using, *args, **kwargs):
# USERGROUP IS CHANGED
if isinstance(instance, Group):
group_touched = AgencyGroup.objects.get(group=instance)
user_touched = User.objects.get(pk=list(pk_set)[0])
# A USER WAS REMOVED FROM A GROUP
if(action == 'post_remove'):
print("USER REMOVED " + user_touched.first_name + " FROM GROUP " + group_touched.agencygroupname)
# A USER WAS ADDED TO A GROUP
elif(action == 'post_add'):
print("USER ADDED " + user_touched.first_name + " TO GROUP " + group_touched.agencygroupname)