From 6b93b3f543192d2a132b4dd63b86e67a5401f7d1 Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Tue, 28 Dec 2021 12:59:52 +0100
Subject: [PATCH] Implement Person.member_of_recursive

---
 aleksis/core/models.py | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index 0b56b742b..489e23a23 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -300,6 +300,14 @@ class Person(ExtensibleModel):
 
     user_info_tracker = FieldTracker(fields=("first_name", "last_name", "email"))
 
+    @property
+    def member_of_recursive(self) -> QuerySet:
+        """Get all groups this person is a member of, recursively."""
+        q = self.member_of
+        for group in q.all():
+            q = q.union(group.parent_groups_recursive)
+        return q
+
     def save(self, *args, **kwargs):
         # Determine all fields that were changed since last load
         dirty = self.pk is None or bool(self.user_info_tracker.changed())
-- 
GitLab