Skip to content

Commit cbd026f

Browse files
committed
fix(rbac): scope group member listing by organization
1 parent 2e8efaa commit cbd026f

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

packages/tracecat-ee/tracecat_ee/rbac/service.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,11 @@ async def list_group_members(
469469
stmt = (
470470
select(User, GroupMember)
471471
.join(GroupMember, GroupMember.user_id == User.id)
472-
.where(GroupMember.group_id == group_id)
472+
.join(Group, Group.id == GroupMember.group_id)
473+
.where(
474+
GroupMember.group_id == group_id,
475+
Group.organization_id == self.organization_id,
476+
)
473477
.order_by(User.email)
474478
)
475479
result = await self.session.execute(stmt)

tests/unit/test_rbac_service.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,43 @@ async def test_remove_member_rejects_cross_org_group(
387387
)
388388
assert remaining_member is not None
389389

390+
async def test_list_group_members_excludes_cross_org_group(
391+
self,
392+
session: AsyncSession,
393+
role: Role,
394+
):
395+
"""Listing members should not return rows for groups in another org."""
396+
service = RBACService(session, role=role)
397+
398+
other_org_id = uuid.uuid4()
399+
other_org = Organization(
400+
id=other_org_id,
401+
name="Other List Org",
402+
slug=f"other-list-org-{other_org_id.hex[:8]}",
403+
)
404+
other_user = User(
405+
id=uuid.uuid4(),
406+
email="other-list-rbac-user@example.com",
407+
hashed_password="test",
408+
)
409+
other_group = Group(
410+
name="Other List Group",
411+
organization_id=other_org.id,
412+
created_by=other_user.id,
413+
)
414+
session.add_all([other_org, other_user, other_group])
415+
await session.flush()
416+
session.add(
417+
GroupMember(
418+
group_id=other_group.id,
419+
user_id=other_user.id,
420+
)
421+
)
422+
await session.commit()
423+
424+
members = await service.list_group_members(other_group.id)
425+
assert members == []
426+
390427

391428
@pytest.mark.anyio
392429
class TestRBACServiceAssignments:

0 commit comments

Comments
 (0)