core: hotfix group membership check (#6584)
This commit is contained in:
parent
cecf7a0200
commit
0472ef583c
|
@ -160,8 +160,8 @@ class User(SerializerModel, GuardianUserMixin, AbstractUser):
|
||||||
"""Recursively get all groups this user is a member of.
|
"""Recursively get all groups this user is a member of.
|
||||||
At least one query is done to get the direct groups of the user, with groups
|
At least one query is done to get the direct groups of the user, with groups
|
||||||
there are at most 3 queries done"""
|
there are at most 3 queries done"""
|
||||||
direct_groups = tuple(
|
direct_groups = list(
|
||||||
str(x) for x in self.ak_groups.all().values_list("pk", flat=True).iterator()
|
x for x in self.ak_groups.all().values_list("pk", flat=True).iterator()
|
||||||
)
|
)
|
||||||
if len(direct_groups) < 1:
|
if len(direct_groups) < 1:
|
||||||
return Group.objects.none()
|
return Group.objects.none()
|
||||||
|
@ -169,7 +169,7 @@ class User(SerializerModel, GuardianUserMixin, AbstractUser):
|
||||||
WITH RECURSIVE parents AS (
|
WITH RECURSIVE parents AS (
|
||||||
SELECT authentik_core_group.*, 0 AS relative_depth
|
SELECT authentik_core_group.*, 0 AS relative_depth
|
||||||
FROM authentik_core_group
|
FROM authentik_core_group
|
||||||
WHERE authentik_core_group.group_uuid IN (%s)
|
WHERE authentik_core_group.group_uuid = ANY(%s)
|
||||||
|
|
||||||
UNION ALL
|
UNION ALL
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ class User(SerializerModel, GuardianUserMixin, AbstractUser):
|
||||||
GROUP BY group_uuid, name
|
GROUP BY group_uuid, name
|
||||||
ORDER BY name;
|
ORDER BY name;
|
||||||
"""
|
"""
|
||||||
group_pks = [group.pk for group in Group.objects.raw(query, direct_groups).iterator()]
|
group_pks = [group.pk for group in Group.objects.raw(query, [direct_groups]).iterator()]
|
||||||
return Group.objects.filter(pk__in=group_pks)
|
return Group.objects.filter(pk__in=group_pks)
|
||||||
|
|
||||||
def group_attributes(self, request: Optional[HttpRequest] = None) -> dict[str, Any]:
|
def group_attributes(self, request: Optional[HttpRequest] = None) -> dict[str, Any]:
|
||||||
|
|
|
@ -13,7 +13,9 @@ class TestGroups(TestCase):
|
||||||
user = User.objects.create(username=generate_id())
|
user = User.objects.create(username=generate_id())
|
||||||
user2 = User.objects.create(username=generate_id())
|
user2 = User.objects.create(username=generate_id())
|
||||||
group = Group.objects.create(name=generate_id())
|
group = Group.objects.create(name=generate_id())
|
||||||
|
other_group = Group.objects.create(name=generate_id())
|
||||||
group.users.add(user)
|
group.users.add(user)
|
||||||
|
other_group.users.add(user)
|
||||||
self.assertTrue(group.is_member(user))
|
self.assertTrue(group.is_member(user))
|
||||||
self.assertFalse(group.is_member(user2))
|
self.assertFalse(group.is_member(user2))
|
||||||
|
|
||||||
|
|
Reference in New Issue