feat(dashboard): 设置页新增「分享可编辑链接」按钮 - #1063
Conversation
管理员在设置→访问权限点一下即可复制带写权限 token 的本地直连链接(localUrl), 发给同事在内网打开即获得全量编辑权(改配置、开关会话),省去登终端跑 botmux dashboard。 - 新增 GET /api/dashboard/edit-link:仅本地管理 token(authed)可访问,未登录 401、 无 active token 时 404;返回 dashboardUrlsFor(activeToken) 的 url + localUrl。 - 设置页 access 区新增 ShareEditLinkRow(仅 canWrite 管理员可见),复制 localUrl (平台子域 url 会拦非 owner,本地直连才是同事能打开的),紧凑按钮与相邻 OAuth/前缀行同款。 - 中英文文案含安全提示:token 即完整编辑权,收回需重新 botmux dashboard rotate。 影响面:仅 dashboard(后端只读端点 + 前端设置页),不涉及会话/CLI/后端类型; 读取复用既有 activeToken 与 dashboardUrlsFor,未改鉴权模型。 验证:dashboard-auth 单测 99 条全绿;tsc 对改动文件零报错;dashboard bundle 通过; live daemon 实测——按钮渲染、点击复制到内网直连链接、未登录 401、只读访客不可见。
|
感谢这个 PR,出发点很实在——「把编辑权交给同事」此前确实只有 SSH 上宿主机跑 不过在评审时发现几处问题,主要集中在「这条链接实际授予的权限」和「文案承诺的权限」之间的落差上,想先跟你同步一下: 1. 这条链接授予的是完整宿主管理权,包含一个裸 bash文案写的是「改配置、开关会话」,但拿到这个 token 的人 WS 那半段也不会再拦一次: 值得一读的是 2. 这条链接会绕过平台的角色降权机制这一条可能是最需要讨论的。同一个人、同一台机器,两条路径的结果不同:
PR 描述把「平台子域对非 owner 有独立鉴权,同事打开会被挡」作为选择 需要说明的是,这个绕过能力并非本 PR 新造:任何持有 activeToken 的人历来都有。本 PR 的影响是把分发门槛降到了一键,并且把这个绕过写成了功能理由。这一层更偏产品方向,可能需要维护者拍板。 3. 文案里的收回方法不生效(这条改一行即可)中英文案都写着「想收回运行 所以管理员照文案操作,会以为链接已收回,实际旧链接依然有效。安全提示里这类错误影响比较大(让人误以为已经处置完了),建议改成 4. 仓库里已有一个做同一件事的端点,可以复用它的防线
同源那道不只是形式: 另外 standing-link 顶注还立了一条红线:「长期 token 不得进聊天记录」(因为卡片历史、转发、截图都比首次投递活得久),飞书卡片那个按钮因此只发 30 分钟短票。本 PR 的使用场景正对着这条红线,也建议一并讨论。 关于复用的一个提醒:不能直接把前端改指过去。 5.
|
改了什么
管理员在 dashboard 设置 → 访问权限 新增一个「复制可编辑链接」按钮:点一下即复制一条带写权限 token 的本地直连链接(
localUrl),发给同事在内网打开即获得全量编辑权(改配置、开关会话),省去登宿主终端跑botmux dashboard。为什么
此前把编辑权交给别人只能在终端
botmux dashboard手动 rotate 出链接,网页上没有任何入口;而botmux dashboard打印的首行是平台子域链接(m-<id>.<platform>/?t=),平台侧对非 owner 有独立鉴权,同事打开会被挡。本按钮直接复制本地直连形式(http://<lanhost>:<port>/?t=),才是内网里同事真正打得开的那条。实现
src/dashboard.ts:新增GET /api/dashboard/edit-link。仅本地管理 token(authed,即与其它管理写操作同源的能力)可访问——未登录 401、无 active token 时 404;命中返回dashboardUrlsFor(activeToken)的url+localUrl。复用既有activeToken与dashboardUrlsFor,未改动鉴权模型。src/dashboard/web/settings-page.tsx:access 区新增ShareEditLinkRow,仅canWrite管理员渲染。复制时优先取localUrl(平台子域url会拦非 owner,本地直连才是同事能打开的)。按钮结构与相邻 OAuth 回调基址/群名前缀行同款(.settings-subfield+.actions),视觉一致。src/dashboard/web/i18n.ts:中英文各一组,含安全提示——token 即完整编辑权,谁拿到都能改,收回需重新botmux dashboardrotate(旧链接同时失效)。影响面
仅 dashboard(后端一个只读端点 + 前端设置页一个组件)。不涉及会话 / CLI / 后端类型 / 卡片 / 其它 IM。鉴权模型未变,只读访客看不到按钮、也拿不到端点数据。
验证
test/dashboard-auth.test.ts99 条全绿tsc零报错;dashboard bundle 通过/api/dashboard/edit-link未登录 401、登录返回 url+localUrl;只读访客不可见按钮截图(access 区,点击后)
复制成功后显示绿色提示「Editable link copied — a teammate can open it on the internal network to edit.」;按钮为紧凑描边胶囊,与「Use the address I am on / Save」同款。