mirror of
https://github.com/BerriAI/litellm.git
synced 2026-11-02 07:13:02 +00:00
fix(proxy): drop unbounded IN from org admin check in /v2/user/info
Some checks failed
Cost map pins recheck / rerun-cost-map-guard (push) Has been cancelled
LiteLLM Rust DB / db-queries (push) Has been cancelled
LiteLLM Rust / rust-lint (push) Has been cancelled
LiteLLM Rust / rust-test (push) Has been cancelled
LiteLLM Rust / rust-wheel (push) Has been cancelled
Terraform Provider / gofmt, vet, build, test (push) Has been cancelled
Terraform Provider / Provider endpoints vs proxy OpenAPI schema (push) Has been cancelled
Some checks failed
Cost map pins recheck / rerun-cost-map-guard (push) Has been cancelled
LiteLLM Rust DB / db-queries (push) Has been cancelled
LiteLLM Rust / rust-lint (push) Has been cancelled
LiteLLM Rust / rust-test (push) Has been cancelled
LiteLLM Rust / rust-wheel (push) Has been cancelled
Terraform Provider / gofmt, vet, build, test (push) Has been cancelled
Terraform Provider / Provider endpoints vs proxy OpenAPI schema (push) Has been cancelled
This commit is contained in:
parent
f998fb05cb
commit
a88b57e53d
2 changed files with 6 additions and 15 deletions
|
|
@ -1111,13 +1111,11 @@ async def _target_in_caller_admin_org(
|
|||
)
|
||||
if not admin_memberships:
|
||||
return False
|
||||
shared_membership: Final = await prisma_client.db.litellm_organizationmembership.find_first(
|
||||
where={
|
||||
"user_id": target_user_id,
|
||||
"organization_id": {"in": [membership.organization_id for membership in admin_memberships]},
|
||||
}
|
||||
admin_org_ids: Final = {membership.organization_id for membership in admin_memberships}
|
||||
target_memberships: Final = await prisma_client.db.litellm_organizationmembership.find_many(
|
||||
where={"user_id": target_user_id}
|
||||
)
|
||||
return shared_membership is not None
|
||||
return any(membership.organization_id in admin_org_ids for membership in target_memberships)
|
||||
|
||||
|
||||
@router.get(
|
||||
|
|
|
|||
|
|
@ -3738,11 +3738,8 @@ _ORG_MEMBERSHIPS: Final = (
|
|||
|
||||
|
||||
def _membership_matches(membership: SimpleNamespace, where: Mapping[str, object]) -> bool:
|
||||
org_filter: Final = where.get("organization_id")
|
||||
return (
|
||||
membership.user_id == where["user_id"]
|
||||
and ("user_role" not in where or membership.user_role == where["user_role"])
|
||||
and (not isinstance(org_filter, dict) or membership.organization_id in org_filter["in"])
|
||||
return membership.user_id == where["user_id"] and (
|
||||
"user_role" not in where or membership.user_role == where["user_role"]
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -3760,13 +3757,9 @@ def _org_admin_prisma(mocker: MockerFixture) -> MagicMock:
|
|||
async def find_many(**kwargs: Mapping[str, object]) -> list[SimpleNamespace]:
|
||||
return [m for m in _ORG_MEMBERSHIPS if _membership_matches(m, kwargs["where"])]
|
||||
|
||||
async def find_first(**kwargs: Mapping[str, object]) -> SimpleNamespace | None:
|
||||
return next((m for m in _ORG_MEMBERSHIPS if _membership_matches(m, kwargs["where"])), None)
|
||||
|
||||
prisma: Final = mocker.MagicMock()
|
||||
prisma.db.litellm_usertable.find_unique = mocker.AsyncMock(side_effect=find_unique)
|
||||
prisma.db.litellm_organizationmembership.find_many = mocker.AsyncMock(side_effect=find_many)
|
||||
prisma.db.litellm_organizationmembership.find_first = mocker.AsyncMock(side_effect=find_first)
|
||||
return prisma
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue