mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 05:23:35 +00:00
user_groups: Add is_user_in_group function.
This commits adds is_user_in_group function which can be used to check whether a user is part of a user group or not. It also supports recursive parameter for including the members of all the subgroups as well.
This commit is contained in:
@@ -150,6 +150,15 @@ def get_recursive_membership_groups(user_profile: UserProfile) -> "QuerySet[User
|
||||
return cte.join(UserGroup, id=cte.col.id).with_cte(cte)
|
||||
|
||||
|
||||
def is_user_in_group(
|
||||
user_group: UserGroup, user: UserProfile, *, direct_member_only: bool = False
|
||||
) -> bool:
|
||||
if direct_member_only:
|
||||
return UserGroupMembership.objects.filter(user_group=user_group, user_profile=user).exists()
|
||||
|
||||
return get_recursive_group_members(user_group=user_group).filter(id=user.id).exists()
|
||||
|
||||
|
||||
def create_system_user_groups_for_realm(realm: Realm) -> Dict[int, UserGroup]:
|
||||
"""Any changes to this function likely require a migration to adjust
|
||||
existing realms. See e.g. migration 0375_create_role_based_system_groups.py,
|
||||
|
||||
@@ -17,6 +17,7 @@ from zerver.lib.user_groups import (
|
||||
get_recursive_group_members,
|
||||
get_recursive_membership_groups,
|
||||
get_recursive_subgroups,
|
||||
is_user_in_group,
|
||||
user_groups_in_realm_serialized,
|
||||
)
|
||||
from zerver.models import (
|
||||
@@ -174,6 +175,29 @@ class UserGroupTestCase(ZulipTestCase):
|
||||
],
|
||||
)
|
||||
|
||||
def test_is_user_in_group(self) -> None:
|
||||
realm = get_realm("zulip")
|
||||
shiva = self.example_user("shiva")
|
||||
iago = self.example_user("iago")
|
||||
hamlet = self.example_user("hamlet")
|
||||
|
||||
moderators_group = UserGroup.objects.get(
|
||||
name="@role:moderators", realm=realm, is_system_group=True
|
||||
)
|
||||
administrators_group = UserGroup.objects.get(
|
||||
name="@role:administrators", realm=realm, is_system_group=True
|
||||
)
|
||||
|
||||
self.assertTrue(is_user_in_group(moderators_group, shiva))
|
||||
|
||||
# Iago is member of a subgroup of moderators group.
|
||||
self.assertTrue(is_user_in_group(moderators_group, iago))
|
||||
self.assertFalse(is_user_in_group(moderators_group, iago, direct_member_only=True))
|
||||
self.assertTrue(is_user_in_group(administrators_group, iago, direct_member_only=True))
|
||||
|
||||
self.assertFalse(is_user_in_group(moderators_group, hamlet))
|
||||
self.assertFalse(is_user_in_group(moderators_group, hamlet, direct_member_only=True))
|
||||
|
||||
|
||||
class UserGroupAPITestCase(UserGroupTestCase):
|
||||
def test_user_group_create(self) -> None:
|
||||
|
||||
Reference in New Issue
Block a user