import json from django.contrib.admin.models import LogEntry, CHANGE from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType from django.core.mail import send_mail from django.db.models import signals from website.settings import * def post_log_save(sender, instance: LogEntry, *args, **kwargs): if instance.action_flag == CHANGE and instance.change_message: ct: ContentType = instance.content_type if ct.app_label == "auth" and ct.model == "user": user: User = User.objects.get(id=instance.object_id) for msg in json.loads(instance.change_message): if 'changed' in msg: for field in msg['changed']['fields']: if field == "Groups" or field == "Staff status" or field == "User permissions": send_notification(user) return signals.post_save.connect(post_log_save, sender=LogEntry, dispatch_uid='post_log_save') def send_notification(user: User): perm_list = [] if user.has_perm("stammbaum.view"): perm_list.append("Du darfst den gesamten Stammbaum ansehen.") if user.has_perm("stammbaum.upload_image"): perm_list.append("Du darfst Bilder für Personen im Stammbaum hochladen.") if user.is_staff and user.has_perm("stammbaum.change_person"): perm_list.append("Du darfst Personen im Stammbaum bearbeiten.") if user.is_staff and user.has_perm("stammbaum.add_person"): perm_list.append("Du darfst Personen zum Stammbaum hinzufügen.") if user.is_staff and user.has_perm("stammbaum.add_group"): perm_list.append("Du darfst deinen eigenen Stammbaum hinzufügen. (Stammbaum bearbeiten -> Gruppe hinzufügen)") send_mail( subject='Deine Berechtigungen wurden geändert', message=f'Hallo {user.get_full_name()}, \n\n' + "deine Berechtigungen auf der Stammbaum-Webseite wurden gerade angepasst.\n\n" + "Jetzt hast du folgende Berechtigungen:\n" + '\n'.join([' - ' + p for p in perm_list]) + '\n\n' + "LG\nWebsite-Admins\n\n" + "https://pi.justprojects.de/stammbaum\n" + f"Login vergessen? Dein Benutzername lautet {user.username}.", from_email='stammbaum@justprojects.de', recipient_list=[user.email], fail_silently=False )