fix: add enterprise feature gating to RegenerateKeyModal in KeyInfoView (#11400)

Pass premiumUser prop to RegenerateKeyModal to control access
Disable Regenerate Key button and show tooltip for non-premium users
Ensure consistent enterprise feature messaging across components
This commit is contained in:
Lik Wei
2025-06-04 12:05:56 -07:00
committed by GitHub
parent 26891c23c5
commit a24077fb4e
@@ -18,7 +18,7 @@ import {
import { ArrowLeftIcon, TrashIcon, RefreshIcon } from "@heroicons/react/outline";
import { keyDeleteCall, keyUpdateCall } from "./networking";
import { KeyResponse } from "./key_team_helpers/key_list";
import { Form, Input, InputNumber, message, Select } from "antd";
import { Form, Input, InputNumber, message, Select, Tooltip } from "antd";
import { KeyEditView } from "./key_edit_view";
import { RegenerateKeyModal } from "./regenerate_key_modal";
import { rolesWithWriteAccess } from '../utils/roles';
@@ -34,9 +34,10 @@ interface KeyInfoViewProps {
userID: string | null;
userRole: string | null;
teams: any[] | null;
premiumUser: boolean;
}
export default function KeyInfoView({ keyId, onClose, keyData, accessToken, userID, userRole, teams, onKeyDataUpdate, onDelete }: KeyInfoViewProps) {
export default function KeyInfoView({ keyId, onClose, keyData, accessToken, userID, userRole, teams, onKeyDataUpdate, onDelete, premiumUser }: KeyInfoViewProps) {
const [isEditing, setIsEditing] = useState(false);
const [form] = Form.useForm();
const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
@@ -150,14 +151,19 @@ export default function KeyInfoView({ keyId, onClose, keyData, accessToken, user
</div>
{userRole && rolesWithWriteAccess.includes(userRole) && (
<div className="flex gap-2">
<Button
icon={RefreshIcon}
variant="secondary"
onClick={() => setIsRegenerateModalOpen(true)}
className="flex items-center"
>
Regenerate Key
</Button>
<Tooltip title={!premiumUser ? "This is a LiteLLM Enterprise feature, and requires a valid key to use." : ""}>
<span className="inline-block">
<Button
icon={RefreshIcon}
variant="secondary"
onClick={() => setIsRegenerateModalOpen(true)}
className="flex items-center"
disabled={!premiumUser}
>
Regenerate Key
</Button>
</span>
</Tooltip>
<Button
icon={TrashIcon}
variant="secondary"
@@ -176,6 +182,7 @@ export default function KeyInfoView({ keyId, onClose, keyData, accessToken, user
visible={isRegenerateModalOpen}
onClose={() => setIsRegenerateModalOpen(false)}
accessToken={accessToken}
premiumUser={premiumUser}
/>
{/* Delete Confirmation Modal */}