ModelRiver 提供四种组织成员角色。这些角色与 users.role 相互独立;后者用于授予系统管理面板的访问权限。
| 能力 | Owner | Admin | Editor | Viewer |
|---|---|---|---|---|
| 查看组织中的项目 | 是 | 是 | 是 | 是 |
| 创建、更新、归档或删除项目 | 是 | 是 | 否 | 否 |
| 更改项目设置或保护状态 | 是 | 是 | 否 | 否 |
| 编辑项目资源 | 所有项目 | 所有项目 | 仅未保护项目 | 否 |
| 在 Playground 中测试工作流 | 所有项目 | 所有项目 | 所有项目 | 否 |
| 重试 Webhook 投递或删除会话 | 所有项目 | 所有项目 | 仅未保护项目 | 否 |
| 修改受保护项目 | 是 | 是 | 否 | 否 |
| 管理成员、邀请和组织设置 | 是 | 否 | 否 | 否 |
| 管理账单和套餐 | 是 | 否 | 否 | 否 |
系统不使用项目级成员分配。Editor 可以编辑组织内所有未保护项目中的资源。
项目保护
projects.protected_at 可以为空。非空时间戳表示项目已受保护。只有组织 Owner 或 Admin 可以设置或清除该值。
对于 Editor,项目保护会阻止以下明确列出的控制台和控制平面变更:
- API Key 和项目供应商凭证
- 工作流和结构化输出
- Webhook 配置和投递重试
- 会话删除
即使项目受保护,Editor 仍可在 Playground 中测试工作流,并重新连接到已有的 Playground 运行。Viewer 在任何项目中都不能运行 Playground 测试。Playground 访问权限不会授予 Editor 保存工作流或项目变更的权限。
保护机制不会停止通过项目 API Key 认证的正常运行时执行,也不会停止内部工作进程。运行时会话更新、请求日志、用量与预算计算、回调以及其他运行状态会继续正常工作。使用 API Key 认证的 Webhook 配置端点属于控制平面 API,因此项目受保护时会拒绝变更。
角色管理
只有 Owner 可以邀请成员、重新发送或取消邀请、移除成员或更改角色。可分配的角色为 Admin、Editor 和 Viewer。不能通过成员 API 分配、更改或移除 Owner 角色。
团队成员管理功能仅在付费套餐中提供。免费套餐中的组织仅支持单成员。在控制台中,打开组织菜单并选择 Team members(团队成员),即可邀请成员或更改现有成员的角色。新邀请的默认角色为 Editor。
现有的 member 记录会迁移为 editor。为了支持滚动部署,应用授权逻辑会暂时识别旧值,但新邀请和角色变更无法再创建该值。
管理项目保护
Owner 或 Admin 可以打开项目,选择 Settings(设置),然后在 Project protection(项目保护) 区域中保护或取消保护项目。Editor 和 Viewer 不能更改保护状态或其他项目设置。
权限执行
服务端检查是最终的权限依据。项目响应包含用于 UI 展示的 permissions 对象,但客户端不能把隐藏控件当作授权机制。全局供应商和模型目录的变更需要独立的系统管理员角色(users.role == :admin)。