新增: ScriptNode 白名单跨 crate 配置打通(IPC+OnceLock) - 新增 set_script_safety / get_script_safety IPC - ScriptNode.check_command_policy 优先读运行时配置 - 前端设置页保存时同步注入后端运行时 - 核验确认小程序心跳/文件树刷新/项目分页三项已就绪
This commit is contained in:
@@ -79,7 +79,8 @@
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { open } from '@tauri-apps/plugin-dialog'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { aiApi } from '@/api'
|
||||
import { invoke } from '@tauri-apps/api/core'
|
||||
import { aiApi, settingsApi } from '@/api'
|
||||
import { useAppSettingsStore } from '@/stores/appSettings'
|
||||
import SettingRow from './SettingRow.vue'
|
||||
|
||||
@@ -177,21 +178,36 @@ async function reload() {
|
||||
// ScriptNode 命令执行安全 — 白/黑名单 UI
|
||||
// ------------------------------------------------------------
|
||||
// 前端持久化到 appSettings KV 表(df-script-whitelist / df-script-blacklist)。
|
||||
// 后端 ScriptNode 从环境变量 DF_SCRIPT_WHITELIST / DF_SCRIPT_BLACKLIST 读取(同语义逗号分隔)。
|
||||
// 前后端打通需跨 crate 接口变更(script_node.execute 接受参数注入),当前标注为已知限制。
|
||||
// 临时方案:启动时用脚本注入环境变量(export DF_SCRIPT_WHITELIST=...)。
|
||||
// 后端 ScriptNode 通过 set_script_safety IPC 注入运行时白/黑名单(即时生效)。
|
||||
// 本组件同时持久化到前端 KV(localStorage)和后端(app_settings 表+ OnceLock 全局态)。
|
||||
// ============================================================
|
||||
const scriptWhitelist = ref(appSettings.get<string>('df-script-whitelist', ''))
|
||||
const scriptBlacklist = ref(appSettings.get<string>('df-script-blacklist', ''))
|
||||
|
||||
async function syncScriptSafety() {
|
||||
try {
|
||||
await settingsApi.set('df-script-whitelist', scriptWhitelist.value.trim())
|
||||
await settingsApi.set('df-script-blacklist', scriptBlacklist.value.trim())
|
||||
// 走新的 set_script_safety IPC 同时持久化 + 注入运行时(一次调用完成两件事)
|
||||
await invoke('set_script_safety', {
|
||||
whitelist: scriptWhitelist.value.trim(),
|
||||
blacklist: scriptBlacklist.value.trim(),
|
||||
})
|
||||
emit('toast', t('settings.savedHint'), 'info')
|
||||
} catch (e) {
|
||||
console.error('[SCRIPT-SAFETY] 同步后端失败:', e)
|
||||
emit('toast', t('settings.toastSaveFail', { msg: String(e) }), 'error')
|
||||
}
|
||||
}
|
||||
|
||||
function onScriptWhitelistCommit() {
|
||||
appSettings.set('df-script-whitelist', scriptWhitelist.value.trim())
|
||||
emit('toast', t('settings.savedHint'), 'info')
|
||||
syncScriptSafety()
|
||||
}
|
||||
|
||||
function onScriptBlacklistCommit() {
|
||||
appSettings.set('df-script-blacklist', scriptBlacklist.value.trim())
|
||||
emit('toast', t('settings.savedHint'), 'info')
|
||||
syncScriptSafety()
|
||||
}
|
||||
|
||||
onMounted(load)
|
||||
|
||||
Reference in New Issue
Block a user