fix: push org filter into DB query for /team/list, fix agents.tsx build

- _authorize_and_filter_teams now uses Prisma WHERE clause
  (organization_id IN ...) instead of fetching the full team table
- Add missing Switch import in agents.tsx (pre-existing build error)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
yuneng-jiang
2026-03-07 23:04:08 -08:00
co-authored by Claude Opus 4.6
parent 8f33983389
commit 063198cf8e
2 changed files with 32 additions and 22 deletions
@@ -3434,28 +3434,33 @@ async def _authorize_and_filter_teams(
},
)
response = await prisma_client.db.litellm_teamtable.find_many(
include={"litellm_model_table": True}
)
if allowed_org_ids is not None:
allowed_org_set = set(allowed_org_ids)
seen_team_ids: set = set()
filtered: list = []
for team in response:
if team.organization_id in allowed_org_set:
filtered.append(team)
seen_team_ids.add(team.team_id)
# Also include teams the user is a direct member of
if user_id:
for team in response:
if team.team_id not in seen_team_ids and team.members_with_roles:
for member in team.members_with_roles:
if member.get("user_id") == user_id:
filtered.append(team)
seen_team_ids.add(team.team_id)
return filtered
# Org admin: query DB for teams in their orgs
org_teams = await prisma_client.db.litellm_teamtable.find_many(
where={"organization_id": {"in": allowed_org_ids}},
include={"litellm_model_table": True},
)
if not user_id:
return list(org_teams)
# Also include teams the user is a direct member of (outside their orgs)
seen_team_ids = {team.team_id for team in org_teams}
all_teams = list(org_teams)
# Prisma doesn't support filtering JSON array fields, so we fetch by membership separately
member_teams = await prisma_client.db.litellm_teamtable.find_many(
where={"team_id": {"not_in": list(seen_team_ids)}} if seen_team_ids else {},
include={"litellm_model_table": True},
)
for team in member_teams:
if team.members_with_roles and any(
m.get("user_id") == user_id for m in team.members_with_roles
):
all_teams.append(team)
return all_teams
elif user_id:
# Regular user: fetch all and filter by membership (Prisma can't filter JSON arrays)
response = await prisma_client.db.litellm_teamtable.find_many(
include={"litellm_model_table": True}
)
return [
team
for team in response
@@ -3463,7 +3468,12 @@ async def _authorize_and_filter_teams(
and any(m.get("user_id") == user_id for m in team.members_with_roles)
]
else:
return list(response)
# Proxy admin: all teams
return list(
await prisma_client.db.litellm_teamtable.find_many(
include={"litellm_model_table": True}
)
)
@router.get(
@@ -11,7 +11,7 @@ import {
Badge,
Text,
} from "@tremor/react";
import { Modal, Alert, Tooltip, Skeleton } from "antd";
import { Modal, Alert, Tooltip, Skeleton, Switch } from "antd";
import { CheckCircleOutlined } from "@ant-design/icons";
import { getAgentsList, deleteAgentCall, keyListCall } from "./networking";
import AddAgentForm from "./agents/add_agent_form";