From e3b42d27f739c8ad6103aacd6db642b053dc3eb2 Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 23 Sep 2026 16:39:28 +0800 Subject: [PATCH] fix: disable Lion file tab without transfer permission --- i18n/locales/en.json | 1 + i18n/locales/es.json | 1 + i18n/locales/fr.json | 1 + i18n/locales/ja.json | 1 + i18n/locales/ko.json | 1 + i18n/locales/pt_br.json | 1 + i18n/locales/ru.json | 1 + i18n/locales/vi.json | 1 + i18n/locales/zh.json | 1 + i18n/locales/zh_hant.json | 1 + ui/components/RightPanel/rightPanel.vue | 43 +++++++++++++++---------- 11 files changed, 36 insertions(+), 17 deletions(-) diff --git a/i18n/locales/en.json b/i18n/locales/en.json index b6f4e98ce..7430cacaa 100644 --- a/i18n/locales/en.json +++ b/i18n/locales/en.json @@ -395,6 +395,7 @@ "Session": "Session", "Control": "Control", "Files": "Files", + "FilesPermissionDenied": "File management is unavailable because this session has no upload or download permission.", "AI": "AI", "LunaAiTool_list_terminal_targets": "Find connected terminals", "LunaAiTool_start_terminal_task": "Start terminal task", diff --git a/i18n/locales/es.json b/i18n/locales/es.json index e1b3e4534..0fdc3f4d7 100644 --- a/i18n/locales/es.json +++ b/i18n/locales/es.json @@ -395,6 +395,7 @@ "Session": "Sesión", "Control": "Control", "Files": "Archivos", + "FilesPermissionDenied": "La gestión de archivos no está disponible porque esta sesión no tiene permisos para subir ni descargar archivos.", "AI": "IA", "LunaAiTool_list_terminal_targets": "Buscar terminales conectadas", "LunaAiTool_start_terminal_task": "Iniciar tarea de terminal", diff --git a/i18n/locales/fr.json b/i18n/locales/fr.json index 32ff24b34..b2513b2a7 100644 --- a/i18n/locales/fr.json +++ b/i18n/locales/fr.json @@ -395,6 +395,7 @@ "Session": "Session", "Control": "Contrôle", "Files": "Fichiers", + "FilesPermissionDenied": "La gestion des fichiers est indisponible : cette session ne permet ni le téléversement ni le téléchargement.", "AI": "IA", "LunaAiTool_list_terminal_targets": "Rechercher les terminaux connectés", "LunaAiTool_start_terminal_task": "Démarrer une tâche de terminal", diff --git a/i18n/locales/ja.json b/i18n/locales/ja.json index 177d39b05..ffce5538a 100644 --- a/i18n/locales/ja.json +++ b/i18n/locales/ja.json @@ -395,6 +395,7 @@ "Session": "セッション", "Control": "コントロール", "Files": "ファイル", + "FilesPermissionDenied": "このセッションにはファイルのアップロード権限もダウンロード権限もないため、ファイル管理を利用できません。", "AI": "AI", "LunaAiTool_list_terminal_targets": "接続済みターミナルを検索", "LunaAiTool_start_terminal_task": "ターミナルタスクを開始", diff --git a/i18n/locales/ko.json b/i18n/locales/ko.json index ffe46063c..d713b9604 100644 --- a/i18n/locales/ko.json +++ b/i18n/locales/ko.json @@ -395,6 +395,7 @@ "Session": "세션", "Control": "제어", "Files": "파일", + "FilesPermissionDenied": "이 세션에는 파일 업로드 또는 다운로드 권한이 없어 파일 관리를 사용할 수 없습니다.", "AI": "AI", "LunaAiTool_list_terminal_targets": "연결된 터미널 찾기", "LunaAiTool_start_terminal_task": "터미널 작업 시작", diff --git a/i18n/locales/pt_br.json b/i18n/locales/pt_br.json index 51d28c315..8786d9374 100644 --- a/i18n/locales/pt_br.json +++ b/i18n/locales/pt_br.json @@ -395,6 +395,7 @@ "Session": "Sessão", "Control": "Controle", "Files": "Arquivos", + "FilesPermissionDenied": "O gerenciamento de arquivos está indisponível porque esta sessão não tem permissão para enviar nem baixar arquivos.", "AI": "IA", "LunaAiTool_list_terminal_targets": "Encontrar terminais conectados", "LunaAiTool_start_terminal_task": "Iniciar tarefa de terminal", diff --git a/i18n/locales/ru.json b/i18n/locales/ru.json index 9edb85098..0c3f99e33 100644 --- a/i18n/locales/ru.json +++ b/i18n/locales/ru.json @@ -395,6 +395,7 @@ "Session": "Сеанс", "Control": "Управление", "Files": "Файлы", + "FilesPermissionDenied": "Управление файлами недоступно: у сеанса нет прав на отправку или скачивание файлов.", "AI": "AI", "LunaAiTool_list_terminal_targets": "Найти подключённые терминалы", "LunaAiTool_start_terminal_task": "Запустить задачу терминала", diff --git a/i18n/locales/vi.json b/i18n/locales/vi.json index 891bea0b7..07533287c 100644 --- a/i18n/locales/vi.json +++ b/i18n/locales/vi.json @@ -395,6 +395,7 @@ "Session": "Phiên", "Control": "Điều khiển", "Files": "Tệp", + "FilesPermissionDenied": "Không thể quản lý tệp vì phiên này không có quyền tải lên hoặc tải xuống.", "AI": "AI", "LunaAiTool_list_terminal_targets": "Tìm terminal đã kết nối", "LunaAiTool_start_terminal_task": "Bắt đầu tác vụ terminal", diff --git a/i18n/locales/zh.json b/i18n/locales/zh.json index 144c3adee..a0a904cb0 100644 --- a/i18n/locales/zh.json +++ b/i18n/locales/zh.json @@ -395,6 +395,7 @@ "Session": "会话", "Control": "控制", "Files": "文件", + "FilesPermissionDenied": "当前会话没有文件上传或下载权限,无法使用文件管理。", "AI": "AI", "LunaAiTool_list_terminal_targets": "查找已连接终端", "LunaAiTool_start_terminal_task": "启动终端任务", diff --git a/i18n/locales/zh_hant.json b/i18n/locales/zh_hant.json index 31116b70a..68b2068e5 100644 --- a/i18n/locales/zh_hant.json +++ b/i18n/locales/zh_hant.json @@ -395,6 +395,7 @@ "Session": "會話", "Control": "控制", "Files": "檔案", + "FilesPermissionDenied": "目前會話沒有檔案上傳或下載權限,無法使用檔案管理。", "AI": "AI", "LunaAiTool_list_terminal_targets": "尋找已連線終端", "LunaAiTool_start_terminal_task": "啟動終端任務", diff --git a/ui/components/RightPanel/rightPanel.vue b/ui/components/RightPanel/rightPanel.vue index 8bd7cc953..f51c96a18 100644 --- a/ui/components/RightPanel/rightPanel.vue +++ b/ui/components/RightPanel/rightPanel.vue @@ -72,7 +72,7 @@ const showSftpTab = computed(() => showSftpRightPanelTab(activeSession.value?.pr const tabs = computed(() => { if (activeWorkspaceMode.value === "files") return []; - const items: Array<{ value: RightPanelTab; label: string; icon: string; title?: string }> = [ + const items: Array<{ value: RightPanelTab; label: string; icon: string; title?: string; disabled?: boolean }> = [ { value: "session", label: t("RightPanel.Session"), icon: "i-lucide-terminal" } ]; @@ -82,11 +82,15 @@ const tabs = computed(() => { label: t("RightPanel.Control"), icon: "i-lucide-sliders-horizontal" }); - if (lionSession.value.driverName.value) { + const permission = lionSession.value.actionPermission.value; + const filesDisabled = permission.enable_upload === false && permission.enable_download === false; + if (lionSession.value.driverName.value || filesDisabled) { items.push({ value: "lion-files" as const, label: t("RightPanel.Files"), - icon: "i-lucide-folder-kanban" + icon: "i-lucide-folder-kanban", + disabled: filesDisabled, + title: filesDisabled ? t("RightPanel.FilesPermissionDenied") : undefined }); } } @@ -123,7 +127,7 @@ watch( const paneChanged = prevPaneId !== paneId; if (paneChanged && prevPaneId) rememberRightPanelTab(prevPaneId, activeTab.value); const next = nextRightPanelTab({ - available: items.map((item) => item.value), + available: items.filter((item) => !item.disabled).map((item) => item.value), remembered: paneId ? rememberedRightPanelTab(paneId) : undefined, active: activeTab.value, sftpResolved: sftpResolved.value, @@ -152,18 +156,18 @@ watch(activeTab, (tab) => { >
- + + +
@@ -205,10 +209,15 @@ watch(activeTab, (tab) => { border-color 140ms ease; } -.right-panel-tab-button:hover { +.right-panel-tab-button:not([aria-disabled="true"]):hover { color: color-mix(in srgb, var(--app-fg) 76%, transparent); } +.right-panel-tab-button[aria-disabled="true"] { + cursor: not-allowed; + color: color-mix(in srgb, var(--app-fg) 30%, transparent); +} + .right-panel-tab-button:focus-visible { outline: none; outline: 2px solid var(--app-focus-ring);