用户权限与模型密钥
补编设计稿,2026-10-20;实施状态见阅读导航。本文件依据现有项目约定补写,不是缺失原文的恢复,也不表示功能已经实现。
1. 依据与范围
- 根 AGENTS.md 是开发协作的有效约定;本文件细化身份、授权及密钥生命周期。
- 数据模型、稳定首版 API 和任务协议以正式开发规格为准。
- 所有时限、容量、保留期和预算取自设计决策与参数基线,本文件不维护第二套数值。
- 首个交付闭环包含账号、设备与能力授权、会话撤销和
browser.open_url;模型、BYOK、私人聊天及审批属于后续规划,默认关闭。 - 未开放功能必须在后端和执行端拒绝调用;前端入口隐藏只改善体验,不构成权限边界。
2. 身份与对象
| 对象 | 身份或所有者来源 | 授权依据 |
|---|---|---|
| Web 用户 | 服务端验证的当前会话 | 账号状态、角色、会话状态及对象权限 |
| Windows 设备 | 配对后独立设备凭据 | 设备状态、凭据版本及已认证连接绑定 |
| 任务 | 创建事务中的当前用户 | 任务所有者、设备授权、能力授权和当前策略 |
| 任务输出、截图和文件 | 从所属任务继承所有者 | 任务内容权限与产物类型的独立限制 |
| 私人聊天及计划 | 当前认证用户 | 私有所有权;设备管理权不授予正文访问权 |
| 模型配置 | 当前认证用户 | 配置所有权;平台配置另有管理权限 |
| 排障访问授权 | 明确授权流程记录 | 被授权对象、用途、范围、期限和审计 |
客户端不得决定所有者,也不能通过提交 user_id、替换路径 ID 或 WebSocket 订阅参数获得其他用户权限。
设备配对仅建立设备身份,不自动产生任何普通用户的设备或能力授权。
3. 角色权限矩阵
| 操作 | super_admin |
operator |
viewer |
|---|---|---|---|
| 创建、禁用用户和重置访问 | 允许,需审计 | 拒绝 | 拒绝 |
| 配对、撤销设备及分配权限 | 允许,需审计 | 拒绝 | 拒绝 |
| 查看设备概要 | 全局管理范围 | 已授权设备 | 已授权设备 |
| 创建执行任务 | 全局设备权限,仍受能力策略限制 | 已授权设备及能力 | 拒绝 |
| 读取本人任务内容 | 对象仍获授权时允许 | 对象仍获授权时允许 | 对象仍获授权时允许 |
| 读取同设备其他人的任务正文或输出 | 需单独排障授权 | 拒绝 | 拒绝 |
| 查看任务运维摘要与脱敏审计 | 允许 | 仅本人可见任务事件,不开放审计查询入口 | 仅本人可见任务事件,不开放审计查询入口 |
| 取消任务 | 本人任务;独立管理取消入口后续规划 | 本人且仍有执行权限的任务 | 拒绝 |
| 读取他人私人聊天 | 需单独排障授权 | 拒绝 | 拒绝 |
| 管理本人模型配置(后续) | 允许 | 允许 | 可配置问答模型,不授予执行权 |
| 读取他人模型密钥明文 | 拒绝 | 拒绝 | 拒绝 |
| 修改或删除审计记录 | 拒绝 | 拒绝 | 拒绝 |
viewer 读取本人历史任务适用于角色降级等场景,仍需保有相关设备读取权限。
全局设备权限不覆盖能力禁用、目标网络策略、审批要求和 Agent 本地策略。
运维摘要只包含必要标识、状态、时间和脱敏错误码,不包含任务参数、目标 URL、输出、聊天正文或密钥。
管理员独立管理取消入口属于后续规划,首版不开放;首版设备或权限撤销可由系统按任务规则触发取消。未来管理取消须有发起者与原因审计,不附带读取用户内容的权限。
4. 授权判定与撤销
- 验证用户、会话、设备和设备凭据状态,解析对象所有者。
- 验证角色允许该操作,以及相应设备读取或执行授权。
- 验证能力授权、参数 Schema、目标策略、有效期和适用审批。
- 使用统一授权 Service 返回允许或稳定错误码;路由不得复制一套判断。
- 在创建、分发、逻辑开始许可和每一步工作流分别重检,不能沿用创建时的永久快照。
- Agent 验证设备绑定、许可与任务内容绑定、有效期、去重记录及本地策略后才执行。
任务开始许可的数据库事务是逻辑开始点;许可与撤销采用总纲规定的相同加锁顺序。
撤销事务先提交时,不得批准新的开始许可;许可先提交时,任务可能已经产生副作用,只能发起取消并如实记录。
不得以“先检查、稍后无锁更新”的方式宣称消除了撤销竞态。
权限版本用于检测缓存过期,不能替代当前有效权限及事务检查。
用户禁用或重置访问后,失效相关会话并关闭控制台连接;设备或权限撤销后,移除对应订阅并拒绝新执行。
降级为 viewer 后保留符合读取条件的个人记录,立即失去创建和取消执行任务的权限。
已经开始的任务不因撤销被伪装为未发生;其事件和证据按真实结果保留。
5. 登录与会话
- 禁用公开注册;首个管理员通过一次性初始化流程创建,初始化完成后关闭入口。
- 密码采用安全哈希;不存在默认密码,后台不能读取或回传密码。
- 首版采用同源部署的服务端会话和
Secure、HttpOnly、明确SameSite的 Cookie。 - 状态变更请求校验 CSRF 令牌与
Origin;不能仅依赖SameSite,退出登录也不能使用无保护的 GET。 /ws/console校验会话和精确允许的Origin,连接建立后仍验证每个订阅及敏感操作。- 会话标识只经 Cookie 传输;长期用户凭据不得进入 URL、localStorage 或 WebSocket 查询参数。
- 登录按账号和来源组合限速;错误信息不区分账号不存在、密码错误与账号禁用等敏感细节。
- 登录、会话轮换、退出、撤销、密码重置与管理禁用均留下脱敏审计记录。
- 退出使当前会话失效;重置访问和账号禁用使该用户全部会话失效,并处理现有 WebSocket。
- 生产管理员启用 MFA;MFA 恢复、设备更换和紧急访问须在开放生产前完成可审计设计与验证。
- 会话失效后停止展示新增敏感内容,清理前端相关缓存;重新登录不能复用失效订阅。
6. 设备凭据
配对码高熵、短期、一次性,仅存哈希;消费与设备身份创建必须使用事务避免并发复用。 Agent 凭据独立于 Web 会话,服务端仅保存可验证的受保护表示,注册响应中的秘密不得进入日志。 Agent 使用 DPAPI 的用户作用域或适当的 Credential Manager 存储,并配置文件或条目访问权限。 DPAPI 的机器作用域允许同一机器其他用户解密,不应将其视为用户隔离;参见 Microsoft CryptProtectData 文档。 凭据绑定运行 Agent 的 Windows 用户,明确用户迁移、凭据丢失与重新配对流程,不以明文备份绕过保护。 轮换使用明确凭据版本和生效规则,旧版本撤销后不得通过旧连接继续获得新任务。 设备撤销立即阻止新许可并关闭相关连接;客户端拒绝跳过证书校验,不能自动退回不安全传输。
7. 模型配置与 BYOK:后续规划
模型调用默认经后端代理;浏览器仅提交用户输入和选择的配置 ID,不直接持有平台密钥。
个人配置的候选元数据为配置 ID、所有者、服务商标识、已批准地址、模型标识、secret_ref、密钥版本和状态。
这些是设计字段,正式开放前必须纳入版本化 Schema、迁移和对象授权测试。
配置的读取结果只含元数据及“已配置”标志,不包含可还原的秘密或不必要的密钥片段。
平台管理员可管理平台配置及可用服务商名单,不能因此读取或使用他人的 BYOK。
配置选择以当前用户授权为依据;配置 ID 可见或可猜测不代表有权调用。
| 生命周期操作 | 必须执行的规则 |
|---|---|
| 创建 | 校验配置所有者、服务商和目标地址;秘密写入密钥管理服务或独立加密存储 |
| 保存 | 业务库优先只保存 secret_ref;加密主密钥独立于业务库、源码和普通日志 |
| 测试 | 当前用户有权;只向批准地址发出最小请求,消耗受控预算,返回脱敏诊断 |
| 使用 | 每次调用重检所有权、启用状态、密钥版本、出站授权和预算 |
| 替换或轮换 | 创建新版本,切换引用并失效旧缓存,避免半写入配置 |
| 撤销 | 先禁用新调用和缓存引用,再安排销毁;记录在途调用的已发生用量 |
| 删除 | 移除业务可用引用,安排秘密销毁;审计仅保留必要标识和生命周期事件 |
| 恢复备份 | 保持已撤销版本不可用;不能因旧数据库恢复重新激活已销毁或撤销的秘密 |
跨数据库与密钥存储的操作无法假设原子提交,应使用可恢复状态记录和补偿清理处理孤立秘密。 删除成功的语义首先是“不能再使用”,密钥销毁状态必须可追踪;服务商端的密钥吊销与本地删除分别记录。 已经发送给服务商的请求不能承诺撤回,停用后应停止后续请求并保留实际费用事实。 故障转移只能使用预先批准且用户授权的数据出站目标,不得把 BYOK 或正文转发给未授权服务商。 用户输入、异常堆栈、网络诊断和模型响应均按可能含秘密处理,界面呈现前执行适用脱敏。
8. 私人内容与排障
私人聊天、任务参数、任务输出和截图分别进行对象授权,不能因能够查看任务列表而开放所有明细。 后续排障授权必须列明授权人、受访人、对象范围、读取目的、有效期及实际访问记录。 首版未实现排障授权时,管理员读取他人内容的接口保持关闭,不提供临时超级管理员绕过开关。 授权到期或主动撤销后停止新读取并失效缓存链接;历史访问审计仍保留。 下载链接若未来引入,必须短期、限定对象且满足撤销规则,不能变成永久公开 URL。
9. 验收要求
- 使用两个普通用户与同一设备验证:授权设备可见不代表可以读取他人的任务、输出或订阅事件。
- 验证
viewer无法通过直接 API、WebSocket 或修改请求创建或取消任务。 - 验证禁用用户、降级、撤销设备和能力权限后,已有会话与订阅按规则失效。
- 在真实 MySQL 8.4 上并发运行撤销与开始许可,核对事务提交顺序、结果和审计。
- 验证管理员可看运维摘要,直接请求他人私聊或输出被拒绝;授权不足不泄露对象存在性。
- 验证登录限速、CSRF、错误
Origin、已撤销 Cookie 和重复配对码的拒绝路径。 - 在真实 Windows 上验证凭据受保护存储、运行身份变化、轮换、撤销及重新配对。
- 模型功能开放前验证跨用户配置访问、密钥替换与删除、缓存失效、备份恢复和日志脱敏。
- 模型与 BYOK 关闭时,相关服务不可通过直接请求、任务参数或模型输出被间接启用。
上述内容是待实施验收标准;测试记录应区分单元模拟、MySQL 集成、真实 Windows 和真实服务商验证。