mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-28 06:23:07 +00:00
fix(ui): keep every team in the key form's team list for users who cannot change the organization
This commit is contained in:
parent
2a5f0e7749
commit
45339ad26e
2 changed files with 44 additions and 4 deletions
|
|
@ -1704,6 +1704,44 @@ describe("KeyEditView", () => {
|
|||
expect(screen.queryByRole("option", { name: /Beta/ })).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("should let a non-admin move a key to their team in another organization", async () => {
|
||||
const onSubmitMock = vi.fn().mockResolvedValue(undefined);
|
||||
|
||||
renderWithProviders(
|
||||
<KeyEditView
|
||||
keyData={{ ...MOCK_KEY_DATA, organization_id: null, org_id: "org-1" }}
|
||||
teams={[
|
||||
{ team_id: "team-a", team_alias: "Alpha", organization_id: "org-1" },
|
||||
{ team_id: "team-b", team_alias: "Beta", organization_id: "org-2" },
|
||||
]}
|
||||
onCancel={() => {}}
|
||||
onSubmit={onSubmitMock}
|
||||
accessToken=""
|
||||
userID=""
|
||||
userRole="Internal User"
|
||||
premiumUser={false}
|
||||
/>,
|
||||
);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByLabelText("Organization")).toHaveValue("Engineering");
|
||||
});
|
||||
|
||||
await userEvent.click(screen.getByRole("combobox", { name: "Team" }));
|
||||
await userEvent.click(await screen.findByRole("option", { name: /Beta/ }));
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByLabelText("Organization")).toHaveValue("Sales");
|
||||
});
|
||||
|
||||
await userEvent.click(screen.getByRole("button", { name: /save changes/i }));
|
||||
|
||||
await waitFor(() => {
|
||||
expect(onSubmitMock).toHaveBeenCalled();
|
||||
});
|
||||
expect(onSubmitMock.mock.calls[0][0]).toMatchObject({ organization_id: "org-2", team_id: "team-b" });
|
||||
});
|
||||
|
||||
it("should re-scope teams when the edited key switches to another organization", async () => {
|
||||
const sharedProps = {
|
||||
teams: [
|
||||
|
|
|
|||
|
|
@ -146,6 +146,7 @@ function KeyEditSession({
|
|||
const { data: uiSettingsData } = useUISettings();
|
||||
const enableProjectsUI = Boolean(uiSettingsData?.values?.enable_projects_ui);
|
||||
const hasProject = Boolean(keyData.project_id);
|
||||
const canChangeOrganization = userRole === "Admin" && !hasProject;
|
||||
const detachProject = hasProject && form.watch("project_id") === null;
|
||||
const canDetachProject = canDetachKeyProject(team, organizations, userID, userRole);
|
||||
|
||||
|
|
@ -352,9 +353,10 @@ function KeyEditSession({
|
|||
})),
|
||||
];
|
||||
|
||||
const visibleTeams = selectedOrganizationId
|
||||
? teams?.filter((t) => t.organization_id === selectedOrganizationId)
|
||||
: teams;
|
||||
const visibleTeams =
|
||||
canChangeOrganization && selectedOrganizationId
|
||||
? teams?.filter((t) => t.organization_id === selectedOrganizationId)
|
||||
: teams;
|
||||
|
||||
const teamOptionsFor = (selectedTeamId: string | null): SearchSelectOption[] => {
|
||||
const selectedTeamOutsideFilter = teams?.find((t) => t.team_id === selectedTeamId && !visibleTeams?.includes(t));
|
||||
|
|
@ -795,7 +797,7 @@ function KeyEditSession({
|
|||
value={value}
|
||||
organizations={organizations}
|
||||
loading={isOrganizationsLoading}
|
||||
disabled={userRole !== "Admin" || hasProject}
|
||||
disabled={!canChangeOrganization}
|
||||
onChange={(orgId) => handleOrganizationChange(onChange, orgId)}
|
||||
/>
|
||||
)}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue