fix(skills): hide 技能包 tab when user lacks skill_packages permission (#456)

This commit is contained in:
Kris
2026-09-16 21:35:42 +08:00
committed by jubaoliang
parent aef06311e8
commit 83378876da
@@ -9,7 +9,7 @@
* an explicit `agentId` so callers decide which agent's skills to show.
*/
import { useState } from "react";
import { useMemo, useState } from "react";
import { Empty } from "antd";
import { Blocks, Package, Sparkles, Store } from "lucide-react";
import { useTranslation } from "react-i18next";
@@ -21,6 +21,8 @@ import SkillPackagesTab from "./SkillPackagesTab";
import SkillHubTab from "./SkillHubTab";
import { useSkills } from "../useSkills";
import styles from "../index.module.less";
import { useCurrentUser } from "../../../../hooks/useCurrentUser";
import { userCanAny, PERM } from "../../../../utils/permissions";
type SkillsTab = "custom" | "builtin" | "skillhub" | "packages";
@@ -38,7 +40,14 @@ interface SkillsTabsProps {
export default function SkillsTabs({ agentId }: SkillsTabsProps) {
const { t } = useTranslation();
const currentUser = useCurrentUser();
// Hide the skill-packages tab for users without the `skill_packages` permission.
const canSkillPackages = userCanAny(currentUser, PERM.skillPackages);
const [activeTab, setActiveTab] = useState<SkillsTab>("custom");
const tabs = useMemo(
() => SKILL_TABS.filter((tab) => tab.key !== "packages" || canSkillPackages),
[canSkillPackages],
);
const onInstalledTab =
activeTab === "custom" ||
activeTab === "builtin" ||
@@ -54,7 +63,7 @@ export default function SkillsTabs({ agentId }: SkillsTabsProps) {
return (
<div className={styles.skillsTabs}>
<TabBar tabs={SKILL_TABS} activeKey={activeTab} onChange={setActiveTab} />
<TabBar tabs={tabs} activeKey={activeTab} onChange={setActiveTab} />
<div className={styles.skillsTabsContent}>
{activeTab === "custom" || activeTab === "builtin" ? (
@@ -70,7 +79,7 @@ export default function SkillsTabs({ agentId }: SkillsTabsProps) {
)
) : activeTab === "skillhub" && agentId ? (
<SkillHubTab key={agentId} target={{ type: "agent", agentId }} />
) : activeTab === "packages" && agentId ? (
) : activeTab === "packages" && agentId && canSkillPackages ? (
<SkillPackagesTab
key={agentId}
agentId={agentId}