插件权限指南
15 项插件权限、API 映射、运行时授权流程与隐私档(密码保护)
插件权限指南
权限清单(15 项,全部默认关闭)
插件不需要在 manifest 里预声明权限也不会被阻止——首次调用某能力时弹原生授权框, 用户同意后永久授权,之后可在「权限管理」页随时调整,每次调用记录使用日志。
| 权限 | 常量 | 触发的 API |
|---|---|---|
| 本地存储 | storage | storage.set/get/remove/clear/keys、storage.encrypted.* |
| 文件访问 | file | file.write/read/delete/list/exists/download/writeBinary/readBinary/exportFile/share |
| 网络请求 | network | network.fetch(含 window.fetch polyfill) |
| 剪贴板读取 | clipboard_read | clipboard.read |
| 剪贴板写入 | clipboard_write | clipboard.copy |
| 设备震动 | vibrate | device.vibrate |
| 图片选择 | image_pick | image.pick |
| 图片保存 | image_save | image.save |
| 分享 | share | share.text / share.url |
| 工作流触发 | workflow | workflow.trigger |
| 传感器 | sensors | device.compass / shake / motion |
| AI 调用 | ai | ai.prompt |
| 弹窗提示 | ui_dialog | ui.alert / confirm / prompt / loading.* |
| 密钥派生 | security | security.deriveKey(遗留,仅旧数据迁移) |
| 通知提醒 | notification | notify.schedule / cancel / list |
注意:所有 storage 操作(包括 get)都需要 storage 权限,不存在免权限的读取。
授权流程
- 插件调用受限 API → 宿主弹原生确认框(标注插件名与能力)
- 同意 → 永久授权并继续本次调用;拒绝 → 本次调用返回
{error:'Permission denied'} - 「权限管理」页可随时逐项开关;关闭后相关 API 立即恢复授权确认
隐私档:密码保护开关
权限管理页每个插件还有一个独立的**「密码保护」开关**,它决定数据的加密档位:
| 密码保护 | 数据 | 插件可用性 |
|---|---|---|
| 关(默认) | 设备 KEK 档加密 | 免密可用,没设安全密码也加密 |
| 开 | 密码档加密 | 进插件需验证安全密码;安全中心锁定时数据一并锁定 |
开启 / 关闭的数据迁移
- 开启:若插件有存量数据,会先提示“现有数据将立即全部加密”,确认后显示 字节进度条(KB/MB),完成后弹“加密完成”确认,开关才生效
- 关闭:若有加密数据,先提示“现有数据将解密转为明文”,确认后验证安全中心 密码(解锁拿到密钥),再显示解密进度条,完成后弹“解密完成”确认
- 迁移写盘走临时文件+改名,中断不会损坏数据;任何一步失败,开关保持原状
与「密钥派生」权限的关系
密钥派生是遗留授权(允许插件拿安全中心派生密钥自行加密),仅 v1.7 之前的 信纸/树洞等插件使用。新插件的数据加密由宿主文件层自动完成,不需要这个权限。