功能
Tauri 為應用程式和插件開發人員提供功能系統,以細緻地啟用和約束核心功能對系統 WebView 中運行的應用程式前端的暴露。
功能是一組權限,依其各自的標籤映射到應用程式視窗和 webview。功能可以影響多個視窗和 webview,並且這些可以在多個功能中被引用。
功能檔案可以定義為 src-tauri/capabilities
目錄內的 JSON 或 TOML 檔案。
最佳實踐是使用個別檔案,並且僅在 tauri.conf.json
中通過識別符引用它們,但也可以直接在 capabilities
字段中定義它們。
capabilities
目錄內的所有功能預設為自動啟用。一旦在 tauri.conf.json
中顯式啟用功能,則只有這些功能會用於應用程式建置。
有關組態方案的完整參考,請參閱參考章節。
以下 JSON 範例定義了一個功能,該功能啟用核心插件和 window.setTitle
API 的預設功能。
{ "$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
目錄中定義完善的功能檔案。
{ "app": { "security": { "capabilities": ["my-capability", "main-capability"] } }}
內聯功能可以與預先定義的功能混合使用。
{ "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
陣列。預設情況下,該功能適用於所有目標,但您可以選擇 linux
、macOS
、windows
、iOS
和 android
目標的子集。
例如,適用於桌面作業系統的功能。請注意,它在僅適用於桌面的插件上啟用權限
{ "$schema": "../gen/schemas/desktop-schema.json", "identifier": "desktop-capability", "windows": ["main"], "platforms": ["linux", "macOS", "windows"], "permissions": ["global-shortcut:allow-register"]}
以及另一個適用於行動裝置的功能範例。請注意,它在僅適用於行動裝置的插件上啟用權限
{ "$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 標籤並使用條碼掃描器。
{ "$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