跳到內容
Tauri

功能

Tauri 為應用程式和插件開發人員提供功能系統,以細緻地啟用和約束核心功能對系統 WebView 中運行的應用程式前端的暴露。

功能是一組權限,依其各自的標籤映射到應用程式視窗和 webview。功能可以影響多個視窗和 webview,並且這些可以在多個功能中被引用。

功能檔案可以定義為 src-tauri/capabilities 目錄內的 JSON 或 TOML 檔案。

最佳實踐是使用個別檔案,並且僅在 tauri.conf.json 中通過識別符引用它們,但也可以直接在 capabilities 字段中定義它們。

capabilities 目錄內的所有功能預設為自動啟用。一旦在 tauri.conf.json 中顯式啟用功能,則只有這些功能會用於應用程式建置。

有關組態方案的完整參考,請參閱參考章節。

以下 JSON 範例定義了一個功能,該功能啟用核心插件和 window.setTitle API 的預設功能。

src-tauri/capabilities/default.json
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-capability",
"description": "Capability for the main window",
"windows": ["main"],
"permissions": [
"core:path:default",
"core:event:default",
"core:window:default",
"core:app:default",
"core:resources:default",
"core:menu:default",
"core:tray:default",
"core:window:allow-set-title"
]
}

這些程式碼片段是Tauri 組態檔案的一部分。

這可能是最常見的組態方法,其中個別功能是內聯的,並且僅通過識別符引用權限。

這需要在 capabilities 目錄中定義完善的功能檔案。

src-tauri/tauri.conf.json
{
"app": {
"security": {
"capabilities": ["my-capability", "main-capability"]
}
}
}

內聯功能可以與預先定義的功能混合使用。

src-tauri/tauri.conf.json
{
"app": {
"security": {
"capabilities": [
{
"identifier": "my-capability",
"description": "My application capability used for all windows",
"windows": ["*"],
"permissions": ["fs:default", "allow-home-read-extended"]
},
"my-second-capability"
]
}
}
}

目標平台

功能可以是平台特定的,通過定義 platforms 陣列。預設情況下,該功能適用於所有目標,但您可以選擇 linuxmacOSwindowsiOSandroid 目標的子集。

例如,適用於桌面作業系統的功能。請注意,它在僅適用於桌面的插件上啟用權限

src-tauri/capabilities/desktop.json
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "desktop-capability",
"windows": ["main"],
"platforms": ["linux", "macOS", "windows"],
"permissions": ["global-shortcut:allow-register"]
}

以及另一個適用於行動裝置的功能範例。請注意,它在僅適用於行動裝置的插件上啟用權限

src-tauri/capabilities/mobile.json
{
"$schema": "../gen/schemas/mobile-schema.json",
"identifier": "mobile-capability",
"windows": ["main"],
"platforms": ["iOS", "android"],
"permissions": [
"nfc:allow-scan",
"biometric:allow-authenticate",
"barcode-scanner:allow-scan"
]
}

遠端 API 訪問

預設情況下,API 僅可由與 Tauri 應用程式一起捆綁的程式碼訪問。為了允許遠端來源訪問某些 Tauri 命令,可以在功能組態檔案中定義此項。

此範例將允許從 tauri.app 的所有子網域掃描 NFC 標籤並使用條碼掃描器。

src-tauri/capabilities/remote-tags.json
{
"$schema": "../gen/schemas/remote-schema.json",
"identifier": "remote-tag-capability",
"windows": ["main"],
"remote": {
"urls": ["https://*.tauri.app"]
},
"platforms": ["iOS", "android"],
"permissions": ["nfc:allow-scan", "barcode-scanner:allow-scan"]
}

安全邊界

它保護什麼免受侵害?

根據權限和功能,它可以

  • 最大限度地減少前端洩露的影響
  • 防止或減少本地系統介面和資料的(意外)暴露
  • 防止或減少從前端到後端/系統可能的權限提升

保護什麼?

  • 惡意或不安全的 Rust 程式碼
  • 過於寬鬆的作用域和組態
  • 命令實作中不正確的作用域檢查
  • 來自 Rust 程式碼的有意繞過
  • 基本上任何在應用程式的 rust 核心中編寫的內容
  • 系統 WebView 中的 0-day 或未修補的 1-day 漏洞
  • 供應鏈攻擊或以其他方式受損的開發人員系統

Schema 檔案

Tauri 生成 JSON schema,其中包含應用程式可用的所有權限,從而在 IDE 中實現自動完成。要使用 schema,請將組態中的 $schema 屬性設定為 gen/schemas 目錄中平台特定的 schema 之一。通常,您會將其設定為 ../gen/schemas/desktop-schema.json../gen/schemas/mobile-schema.json,儘管您也可以為特定目標平台定義功能。

組態檔案

範例 Tauri 應用程式目錄結構的簡化範例

終端視窗
tauri-app
├── index.html
├── package.json
├── src
├── src-tauri
├── Cargo.toml
├── capabilities
└── <identifier>.json/toml
├── src
├── tauri.conf.json

一切都可以內聯到 tauri.conf.json 中,但即使稍微更進階的組態也會使此檔案膨脹,並且此方法的目標是在盡可能抽象化權限並使其易於理解。

核心權限

所有核心權限的列表可以在核心權限頁面上找到。


© 2025 Tauri Contributors. CC-BY / MIT