diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index 76608cda46699bf8e2f99f3d8fcbb0f0af4e74eb..d41415660dd08bff81990187c43f683ecdc64b71 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -711,12 +711,26 @@ def my_students(request: HttpRequest) -> HttpResponse:
         .distinct()
     )
 
+    # Prefetch object permissions for persons and groups the persons are members of
+    # because the object permissions are checked for both persons and groups
+    all_persons = Person.objects.filter(member_of__in=relevant_groups)
+    checker = ObjectPermissionChecker(request.user)
+    checker.prefetch_perms(relevant_groups)
+    checker.prefetch_perms(all_persons)
+
     new_groups = []
     for group in relevant_groups:
         persons = group.generate_person_list_with_class_register_statistics(
-            group.members.prefetch_related("primary_group__owners")
+            group.members.prefetch_related(
+                "primary_group__owners",
+                Prefetch("member_of", queryset=relevant_groups, to_attr="member_of_prefetched"),
+            )
         )
-        new_groups.append((group, persons))
+        persons_for_group = []
+        for person in persons:
+            person.set_object_permission_checker(checker)
+            persons_for_group.append(person)
+        new_groups.append((group, persons_for_group))
 
     context["groups"] = new_groups
     context["excuse_types"] = ExcuseType.objects.all()