Skip to content

[Bug] 安装弹窗把低/中风险权限显示成高风险,和权限矩阵对不上 #1480

Description

@GalaxyXieyu

问题描述 / What happened?

插件安装弹窗、详情页和权限标签的风险档位都来自 apps/desktop/src/features/plugins/model.ts 的 PERMISSION_RISK(:38-83)。:37 的注释说它对应权限矩阵 docs/spec/07-plugins/13-plugin-permissions-matrix.md 的风险列,但有几处对不上:

  1. 表里没列的权限走 model.ts:127-128 的 PERMISSION_RISK[key] ?? "high",矩阵里的低、中风险权限因此显示成高风险:
    • ui.view(矩阵 :12,low)
    • ui.window.appearance(矩阵 :14,low)
    • session.read.own、session.update.own(矩阵 :49-50,medium)
    • ui.settings 在矩阵的风险表里没有这一行(只出现在 :142 的文案表),也按 high 显示
  2. background.service 在 model.ts:67 是 high,矩阵 :36、docs/spec/07-plugins/01-plugin-system.md:374、docs/plugin-development.md:892 都是 medium,中文版对应几处也是“中等”。fix(plugin-devkit): warn on every permission the matrix marks high #1467 之后 pi-plugin check 按矩阵走,不会对它提示高风险,和弹窗也不一致。
  3. PERMISSION_RISK 和矩阵之间没有测试,apps/desktop/test/plugin-runtime-risk.test.mjs:98-99 只断言了 fs.write、fs.read 两项。fix(plugin-devkit): warn on every permission the matrix marks high #1467 给 devkit 的列表加了从矩阵读 high 行对比的测试,muzimu217 在 review 里也提到弹窗这份还没有:fix(plugin-devkit): warn on every permission the matrix marks high #1467 (review)

影响:只用了低、中风险权限的插件,安装时也会出现带警告图标的“高风险”分组(PluginDialogs.tsx:291-300)。插件中心目录现有 52 个插件(catalog.json 更新于 2026-10-08 11:43 UTC+8),其中 7 个没有任何矩阵里的 high 权限,弹窗里却有高风险分组:

插件 被显示成高风险的权限
pi.file-manager(也是内置插件) ui.view
pi.gitlens ui.view
icedly.moyu-games ui.view
pi.clipboard-history background.service
cc.mcii.session-notify background.service
local.miku-theme ui.window.appearance
io.github.akshayxkill.nexus-scenic-themes ui.settings、ui.window.appearance

复现步骤 / Steps to reproduce

  1. 在 main 11da3b2f0 的仓库根目录(Node 22)运行:
node --experimental-strip-types --input-type=module -e "const { permissionRisk } = await import('./apps/desktop/src/features/plugins/model.ts'); for (const p of ['ui.panel', 'ui.view', 'ui.window.appearance', 'ui.settings', 'session.read.own', 'session.update.own', 'background.service']) console.log(p, permissionRisk(p));"
  1. 安装弹窗按这个函数的返回值分组(PluginDialogs.tsx:291-306),所以只声明 ui.view 的插件(比如 pi.gitlens)会被归到高风险组。这一步是看代码得出的,没有截图。

预期行为 / Expected behavior

和矩阵一致:ui.view、ui.window.appearance 是 low,session.read.own、session.update.own 是 medium,background.service 和矩阵同档。

实际行为 / Actual behavior

ui.panel low
ui.view high
ui.window.appearance high
ui.settings high
session.read.own high
session.update.own high
background.service high

应用版本 / App version

main 11da3b2f0(源码,0.17.0)。v0.17.0 tag 里 model.ts 的这两处(:67、:128)也一样。

操作系统 / Operating system

Linux

其他 / Additional context

想先确认几点:

  1. 风险档位以权限矩阵为准,对吗?
  2. background.service 应该是 medium 还是 high?如果是 high,那应该改矩阵和两份文档,不改 model.ts。
  3. ui.settings 应该是哪一档?矩阵要补一行。
  4. 未知权限按 high 显示这个兜底我打算保留,只是让已知权限都有明确的档位。

确认后的修复打算(fix(plugins)):按矩阵补齐 PERMISSION_RISK,background.service 按答复调整,再加一个测试,从矩阵里读出每个权限的档位和 PERMISSION_RISK 逐项对比。不改界面。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions