signals.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import json
  2. from django.contrib.admin.models import LogEntry, CHANGE
  3. from django.contrib.auth.models import User
  4. from django.contrib.contenttypes.models import ContentType
  5. from django.core.mail import send_mail
  6. from django.db.models import signals
  7. from website.settings import *
  8. def post_log_save(sender, instance: LogEntry, *args, **kwargs):
  9. if instance.action_flag == CHANGE and instance.change_message:
  10. ct: ContentType = instance.content_type
  11. if ct.app_label == "auth" and ct.model == "user":
  12. user: User = User.objects.get(id=instance.object_id)
  13. for msg in json.loads(instance.change_message):
  14. if 'changed' in msg:
  15. for field in msg['changed']['fields']:
  16. if field == "Groups" or field == "Staff status" or field == "User permissions":
  17. send_notification(user)
  18. return
  19. signals.post_save.connect(post_log_save, sender=LogEntry, dispatch_uid='post_log_save')
  20. def send_notification(user: User):
  21. perm_list = []
  22. if user.has_perm("stammbaum.view"):
  23. perm_list.append("Du darfst den gesamten Stammbaum ansehen.")
  24. if user.has_perm("stammbaum.upload_image"):
  25. perm_list.append("Du darfst Bilder für Personen im Stammbaum hochladen.")
  26. if user.is_staff and user.has_perm("stammbaum.change_person"):
  27. perm_list.append("Du darfst Personen im Stammbaum bearbeiten.")
  28. if user.is_staff and user.has_perm("stammbaum.add_person"):
  29. perm_list.append("Du darfst Personen zum Stammbaum hinzufügen.")
  30. if user.is_staff and user.has_perm("stammbaum.add_group"):
  31. perm_list.append("Du darfst deinen eigenen Stammbaum hinzufügen. (Stammbaum bearbeiten -> Gruppe hinzufügen)")
  32. send_mail(
  33. subject='Deine Berechtigungen wurden geändert',
  34. message=f'Hallo {user.get_full_name()}, \n\n' +
  35. "deine Berechtigungen auf der Stammbaum-Webseite wurden gerade angepasst.\n\n" +
  36. "Jetzt hast du folgende Berechtigungen:\n" +
  37. '\n'.join([' - ' + p for p in perm_list]) + '\n\n' +
  38. "LG\nWebsite-Admins\n\n" +
  39. "https://pi.justprojects.de/stammbaum\n" +
  40. f"Login vergessen? Dein Benutzername lautet {user.username}.",
  41. from_email='stammbaum@justprojects.de',
  42. recipient_list=[user.email],
  43. fail_silently=False
  44. )