diff --git a/allianceauth/groupmanagement/managers.py b/allianceauth/groupmanagement/managers.py index 26d2795d..c85ba84b 100644 --- a/allianceauth/groupmanagement/managers.py +++ b/allianceauth/groupmanagement/managers.py @@ -79,5 +79,5 @@ class GroupManager: :return: True if the user can manage the group """ if user.is_authenticated: - return cls.has_management_permission(user) or user.leads_groups.filter(group=group).exists() + return cls.has_management_permission(user) or cls.get_group_leaders_groups(user).filter(pk=group.pk).exists() return False diff --git a/allianceauth/groupmanagement/tests/test_all.py b/allianceauth/groupmanagement/tests/test_all.py index c5344498..47fdf4f8 100644 --- a/allianceauth/groupmanagement/tests/test_all.py +++ b/allianceauth/groupmanagement/tests/test_all.py @@ -26,9 +26,7 @@ class GroupManagementVisibilityTestCase(TestCase): self.user = User.objects.get(pk=self.user.pk) - def test_can_manage_group(self): - - + def test_get_group_leaders_groups(self): self.group1.authgroup.group_leaders.add(self.user) self.group2.authgroup.group_leader_groups.add(self.group1) self._refresh_user() @@ -46,6 +44,24 @@ class GroupManagementVisibilityTestCase(TestCase): self.assertIn(self.group2, groups) #avail due to group1 self.assertNotIn(self.group3, groups) #not avail at all + def test_can_manage_group(self): + self.group1.authgroup.group_leaders.add(self.user) + self.user.groups.add(self.group1) + self._refresh_user() + + self.assertTrue(GroupManager.can_manage_group(self.user, self.group1)) + self.assertFalse(GroupManager.can_manage_group(self.user, self.group2)) + self.assertFalse(GroupManager.can_manage_group(self.user, self.group3)) + + self.group2.authgroup.group_leader_groups.add(self.group1) + self.group1.authgroup.group_leaders.remove(self.user) + self._refresh_user() + + self.assertFalse(GroupManager.can_manage_group(self.user, self.group1)) + self.assertTrue(GroupManager.can_manage_group(self.user, self.group2)) + self.assertFalse(GroupManager.can_manage_group(self.user, self.group3)) + + class GroupManagementStateTestCase(TestCase): @classmethod def setUpTestData(cls): @@ -72,7 +88,6 @@ class GroupManagementStateTestCase(TestCase): self.state_group = Group.objects.get(pk=self.state_group.pk) def test_drop_state_group(self): - self.user.groups.add(self.open_group) self.user.groups.add(self.state_group) self.assertEqual(self.user.profile.state.name, "Guest") diff --git a/allianceauth/groupmanagement/views.py b/allianceauth/groupmanagement/views.py index 0cd86dda..1ce2092e 100755 --- a/allianceauth/groupmanagement/views.py +++ b/allianceauth/groupmanagement/views.py @@ -33,7 +33,8 @@ def group_management(request): group_requests = base_group_query.all() else: # Group specific leader - group_requests = base_group_query.filter(group__authgroup__group_leaders__in=[request.user]) + users__groups = GroupManager.get_group_leaders_groups(request.user) + group_requests = base_group_query.filter(group__in=users__groups) for grouprequest in group_requests: if grouprequest.leave_request: