Merge branch 'hotfix_groups' into 'master'

HOTFIX GroupManager for Groups as Group Leads

See merge request allianceauth/allianceauth!1178
This commit is contained in:
Ariel Rin 2020-03-09 08:17:41 +00:00
commit fc3d4b7f33
3 changed files with 22 additions and 6 deletions

View File

@ -79,5 +79,5 @@ class GroupManager:
:return: True if the user can manage the group :return: True if the user can manage the group
""" """
if user.is_authenticated: 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 return False

View File

@ -26,9 +26,7 @@ class GroupManagementVisibilityTestCase(TestCase):
self.user = User.objects.get(pk=self.user.pk) 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.group1.authgroup.group_leaders.add(self.user)
self.group2.authgroup.group_leader_groups.add(self.group1) self.group2.authgroup.group_leader_groups.add(self.group1)
self._refresh_user() self._refresh_user()
@ -46,6 +44,24 @@ class GroupManagementVisibilityTestCase(TestCase):
self.assertIn(self.group2, groups) #avail due to group1 self.assertIn(self.group2, groups) #avail due to group1
self.assertNotIn(self.group3, groups) #not avail at all 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): class GroupManagementStateTestCase(TestCase):
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
@ -72,7 +88,6 @@ class GroupManagementStateTestCase(TestCase):
self.state_group = Group.objects.get(pk=self.state_group.pk) self.state_group = Group.objects.get(pk=self.state_group.pk)
def test_drop_state_group(self): def test_drop_state_group(self):
self.user.groups.add(self.open_group) self.user.groups.add(self.open_group)
self.user.groups.add(self.state_group) self.user.groups.add(self.state_group)
self.assertEqual(self.user.profile.state.name, "Guest") self.assertEqual(self.user.profile.state.name, "Guest")

View File

@ -33,7 +33,8 @@ def group_management(request):
group_requests = base_group_query.all() group_requests = base_group_query.all()
else: else:
# Group specific leader # 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: for grouprequest in group_requests:
if grouprequest.leave_request: if grouprequest.leave_request: