feat(plugins): 插件管理 - 区分系统与官方插件权限 (#329)
This commit is contained in:
@@ -7,6 +7,15 @@ description: 影策后端核心持久化表与状态边界
|
||||
|
||||
后端通过 GORM 管理 SQLite 与 PostgreSQL 表结构。服务启动时由 `backend/internal/database/schema.go` 执行迁移;业务写路径必须通过 service 和 repository 的状态约束,不能直接依赖前端状态。
|
||||
|
||||
## 插件管理
|
||||
|
||||
| 表 | 用途 | 关键边界 |
|
||||
| --- | --- | --- |
|
||||
| `plugin_platform_states` | 保存管理员设置的平台可用状态 | `plugin_id` 为主键;平台停用是所有用户的硬上限,管理员变更写入审计日志 |
|
||||
| `user_plugin_states` | 保存用户对官方应用插件的个人启用状态 | `(user_id, plugin_id)` 唯一;系统协议和管理员上传插件不得写入用户级状态 |
|
||||
|
||||
有效状态由服务端计算为 `platform_available AND user_enabled`。官方应用插件没有平台状态记录时默认可用;用户没有个人记录时默认停用,历史上全局启用的工作流插件在用户首次保存个人选择前沿用旧状态。管理员上传包的来源和作用域由宿主覆盖,不能通过 Manifest 提权。
|
||||
|
||||
## ComfyUI Bridge
|
||||
|
||||
| 表 | 用途 | 关键边界 |
|
||||
|
||||
@@ -18,7 +18,7 @@ description: 影策统一插件系统的扩展边界、Manifest 合同与 Eagle
|
||||
## 2. 设计目标
|
||||
|
||||
- 第三方开发者可以独立开发、构建和发布插件。
|
||||
- 用户可以查看插件信息、安装、启用、停用、更新和卸载插件。
|
||||
- 普通用户可以查看并启用官方应用插件;管理员统一安装、更新、停用和卸载系统协议及自定义插件。
|
||||
- 插件不直接依赖页面内部 React 组件和 Zustand store。
|
||||
- 宿主可以通过 `apiVersion` 和权限声明控制兼容性与风险。
|
||||
- 插件的错误、超时、权限拒绝和版本不兼容必须可见,不能静默降级。
|
||||
@@ -41,6 +41,18 @@ description: 影策统一插件系统的扩展边界、Manifest 合同与 Eagle
|
||||
|
||||
插件分类用于权限、市场筛选和能力发现,不直接决定代码目录结构。
|
||||
|
||||
### 4.0 管理分类与权限
|
||||
|
||||
插件的管理分类由宿主根据插件 ID 和安装来源计算,不能由上传包自行声明:
|
||||
|
||||
| 分类 | 典型插件 | 平台可用性 | 用户启用状态 | 配置范围 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 系统插件 | OpenAI、Gemini、即梦等协议 Provider | 管理员 | 不适用 | 管理员 |
|
||||
| 官方插件 | RunningHub、ComfyUI Bridge、Eagle、提示词优化器、肖像排查 | 管理员作为硬上限 | 每个用户独立 | 按插件为用户级或无配置 |
|
||||
| 自定义插件 | 管理员上传的 `.yingce-plugin` | 管理员 | 不适用 | 管理员 |
|
||||
|
||||
`/plugins` 是用户发现、个人启用和个人配置入口;`/admin/plugins` 是平台可用性、上传、卸载和启用人数入口。普通用户是否能看到只读的系统/自定义插件由“向普通用户显示系统插件”功能开关控制,但官方应用插件始终保留个人开关。
|
||||
|
||||
### 4.1 画布节点插件
|
||||
|
||||
新增自定义节点类型、节点内容渲染、节点详情面板、节点工具栏和节点输入输出资源。
|
||||
@@ -179,6 +191,8 @@ export interface PluginSetupApi {
|
||||
5. 卸载阶段清理插件存储、事件订阅、注册命令和可选的插件节点数据。
|
||||
6. 更新失败时保留旧版本,不能留下半启用状态。
|
||||
|
||||
平台状态与用户状态分开保存:`effectiveEnabled = platformAvailable && userEnabled`。协议和自定义插件只有平台状态。用户停用工作流插件后禁止新任务进入,但已经接收的任务和 Bridge 结果回传继续完成;管理员停用属于平台硬上限,同样不强行破坏已进入执行阶段的任务。
|
||||
|
||||
## 8. Eagle 外部素材来源方案
|
||||
|
||||
Eagle 插件的主分类是“素材与数据连接器”,可以附带一个 `EagleAsset` 画布节点。
|
||||
|
||||
@@ -5,6 +5,15 @@ description: 影策已实现功能的手工验证清单与未确认边界
|
||||
|
||||
# 待测试
|
||||
|
||||
## 插件分层管理
|
||||
|
||||
- [ ] 管理员在 `/admin/plugins` 停用官方应用插件后,普通用户的有效状态和新请求同时被阻止;重新开放后保留原个人启用选择。
|
||||
- [ ] 两个普通用户分别启用和停用同一官方应用插件,确认状态、Eagle 配置和工作流入口互不串号。
|
||||
- [ ] 普通用户不能切换系统协议或管理员上传插件;关闭“向普通用户显示系统插件”后,两类插件均不可见。
|
||||
- [ ] 用户停用 RunningHub / ComfyUI 后不能提交新任务,但已接收任务、Bridge 轮询、心跳和结果回传可以完成。
|
||||
- [ ] 管理员上传、停用、启用和卸载自定义插件后,插件包、平台状态、用户状态与审计日志一致。
|
||||
- [ ] 验证 `/plugins` 与 `/admin/plugins` 的浅色/深色主题、窄屏、空态、筛选、上传弹窗和开关失败回滚。
|
||||
|
||||
## RunningHub 与 ComfyUI Bridge 工作流
|
||||
|
||||
- [x] 后端全量测试、前端类型检查、Canvas Agent 构建和原生 Bridge Go 测试通过。
|
||||
|
||||
Reference in New Issue
Block a user