评分回顾:7/13(战略 2 护城河 1 用户 2 复杂度 1 创新 1)。角色系统是 SaaS 平台的基础设施。加性设计在同类产品中常见(Slack 也有类似思路),独立护城河有限。但减法型自定义角色(特别是 app allowlist / node denylist / concurrency limit 三层)在 AI Agent 平台场景下构成差异化能力。
Gumloop v8.7.0 "Moosonee" 确立了 Composable Roles 的核心设计:角色可加、可组合。不同于传统层级式 RBAC(每用户一个角色,权限向下继承),Gumloop 允许成员持有多个角色,有效权限 = 所有角色权限的并集。
角色分为两类:
这种设计解决了「某人需要管理安全策略但不应看到财务数据」的场景 — 只需授予 Security 角色而不给 Admin。
角色为加性(additive)且可组合(composable)。成员可同时持有多个角色,最终有效权限 = 所有持有角色权限的并集。Member 是隐式基线 — 所有成员自动拥有 Member 权限,即使未显式分配。
有效权限 = Member (基线) ∪ Role_A ∪ Role_B ∪ ... ∪ Role_N
关键行为:
| 角色 | 类别 | 计划要求 | 核心权限 | 可分配角色 |
|---|---|---|---|---|
| Admin | Admin | Pro+ | 全部:计费、SSO、成员管理、审计日志、应用策略、MCP、所有内容 | 所有角色 |
| Manager | Admin | Pro+ | 成员管理、凭据管理、分析数据、模板管理 | Analytics、Templates、Member |
| Member | Feature | 全部计划 | 创建内容、创建团队、个人凭据 | 无(基线) |
| Security | Feature | Enterprise | 自定义角色、应用策略、AI 模型访问控制、应用活动日志、MCP 管理 | Developer |
| Developer | Feature | Enterprise | 托管/代理 MCP、自有服务器活动 | 无 |
| Analytics | Feature | Enterprise | 组织级分析、用量数据、数据导出 | 无 |
| Templates | Feature | Pro+ | 模板库管理 | 无 |
Admin: billing, sso, members, audit-logs, app-policies, mcp:*, content:*, credentials:*, analytics:*, templates:* Manager: members:read+invite+remove, credentials:*, analytics:read, templates:* Member: content:create, team:create, credentials:self Security: custom-roles:*, app-policies:*, ai-model-access:*, app-activity:read, mcp:read+approve Developer: mcp:hosted+proxied, server-activity:self Analytics: analytics:read, usage:read, export:data Templates: templates:*
注意:Admin 和 Manager 被归类为 "Admin roles" 而非 Feature roles — 它们覆盖多个领域,与聚焦单一领域的 Feature roles 在语义上区分。
团队角色在团队范围内生效,与组织角色并行:
| 团队角色 | 权限范围 | 说明 |
|---|---|---|
| Team Admin | 团队内全部内容、凭据、分析、成员管理 | 最高团队权限 |
| Team Member | 团队内容只读 | 团队基线 |
关键规则:
organization:manage_team_access → 可管理任何团队,无论其团队角色自定义角色是一个独立的、减法型系统。与标准角色的加性逻辑相反:
| 控制类型 | 机制 | 场景示例 |
|---|---|---|
| App 白名单 | 只允许成员使用指定的应用/工具 | 「实习生只能使用 Slack 和 Email 节点」 |
| Node 黑名单 | 禁止成员使用特定节点类型 | 「禁止使用 HTTP Request 节点」 |
| 并发限制 | 限制成员同时运行的 Agent 数量 | 「每个成员最多同时运行 3 个 Agent」 |
权限解析按以下顺序逐级裁决,全部同意才放行:
请求访问资源
│
▼
┌──────────────────────────────────────┐
│ Layer 1: Roles(天花板) │
│ 有效权限 = 所有组织角色 ∪ 所有团队角色 │
│ → 确定权限上限(ceiling) │
└──────────────────┬───────────────────┘
▼
┌──────────────────────────────────────┐
│ Layer 2: Item Sharing(逐项覆写) │
│ 资源所有者可授予:Editor/Viewer/Use-only│
│ → 逐项放宽或限制访问 │
└──────────────────┬───────────────────┘
▼
┌──────────────────────────────────────┐
│ Layer 3: Custom Roles(减法) │
│ 从前两层允许的权限中减去限制项 │
│ → 精确 deny-list │
└──────────────────┬───────────────────┘
▼
允许 / 拒绝
关键约束:
成员持有:Member + Templates Layer 1 天花板:content:create + team:create + templates:* Layer 2:某模板被所有者设为 "Use-only" Layer 3:自定义角色禁止 "删除模板" → 该成员可以使用此模板,但不能编辑或删除
| ID | 需求 | 优先级 | 状态 |
|---|---|---|---|
| A1 | 系统预定义 7 个组织级角色(Admin/Manager/Member/Security/Developer/Analytics/Templates) | P0 | 已实现 |
| A2 | 系统预定义 2 个团队级角色(Team Admin/Team Member) | P0 | 已实现 |
| A3 | Admin 角色拥有 organization:manage_team_access 能力,可管理任意团队 | P0 | 已实现 |
| A4 | Member 角色作为隐式基线,所有用户自动持有 | P0 | 已实现 |
| A5 | Feature 角色(Security/Developer/Analytics/Templates)按计划层级解锁 | P1 | 已实现 |
| A6 | 自定义角色支持 App 白名单、Node 黑名单、并发限制三类策略 | P0 | 已实现 |
| ID | 需求 | 优先级 | 状态 |
|---|---|---|---|
| B1 | 一个成员可同时持有多个组织角色 | P0 | 已实现 |
| B2 | 一个成员可同时持有组织角色和团队角色 | P0 | 已实现 |
| B3 | Admin 可分配所有角色,Manager 可分配 Analytics/Templates/Member | P0 | 已实现 |
| B4 | Security 角色可分配 Developer 角色 | P1 | 已实现 |
| B5 | 新邀请成员自动加入默认自定义角色 | P0 | 已实现 |
| B6 | 角色变更实时生效,无需重新登录 | P1 | 推断 |
| ID | 需求 | 优先级 | 状态 |
|---|---|---|---|
| C1 | 有效权限 = 所有持有角色权限的并集(加性) | P0 | 已实现 |
| C2 | 三级解析链:Roles → Item Sharing → Custom Roles | P0 | 已实现 |
| C3 | Item Sharing 不得超过 Roles 天花板 | P0 | 已实现 |
| C4 | Custom Roles 只能减法,不能反向授予 | P0 | 已实现 |
| C5 | 所有三层同意,操作才放行 | P0 | 已实现 |
| C6 | 多个自定义角色组合时,取最严格限制 | P1 | 已实现 |
| ID | 需求 | 优先级 | 状态 |
|---|---|---|---|
| D1 | 创建/编辑/删除自定义角色 | P0 | 已实现 |
| D2 | 自定义角色支持 App 白名单配置 | P0 | 已实现 |
| D3 | 自定义角色支持 Node 黑名单配置 | P0 | 已实现 |
| D4 | 自定义角色支持并发数量限制 | P0 | 已实现 |
| D5 | 自定义角色仅限 Enterprise 计划(通过 Security 角色管理) | P1 | 已实现 |
| D6 | 自定义角色变更即时生效 | P1 | 推断 |
| 维度 | Gumloop | GitHub Org Roles | Slack Roles | AWS IAM |
|---|---|---|---|---|
| 模型 | 加性 + 减法自定义角色 | 层级继承(Owner > Admin > Member) | 层级 + 部分扁平(Owner/Admin/Member/Guest) | 策略并集(Allow + Deny 评估) |
| 多角色持有 | 是,核心设计 | 否,每组织一个角色 | 否,每工作区一个角色;多频道可不同角色 | 是,多个 Policy 可附着于同一 Principal |
| 自定义角色 | 减法型(deny-list)+ 资源白名单 | 支持自定义 Repository Role(加性) | 不支持原生自定义 | 完全自定义 Policy(JSON) |
| 权限解析 | 三级:角色天花板 → 分享覆写 → 自定义减法 | 逐仓库权限 + 组织基权 | 工作区角色 + 频道级覆写 | 显式 Allow/Deny + 默认隐式拒绝 |
| 复杂度 | 低(3 层线性裁决) | 中 | 低 | 极高(策略模拟器必备) |
| 适用场景 | AI Agent 平台,中小团队合规 | 代码协作 | 团队沟通 | 云基础设施全谱 |
| 差异化 | 减法自定义角色 + 资源级白名单(App/Node/并发) | 仓库级细粒度 | 简单直观 | 极灵活但学习曲线陡峭 |
project=marketing 标签的工作流」| 文档 | 路径/URL | 状态 |
|---|---|---|
| 官方帮助文档 — Organization Roles | /spec_resource/gumloop-docs_user-roles.md(存档自 docs.gumloop.com) | 完整 |
| v8.7.0 "Moosonee" Changelog | 内部 | 角色系统在此版本确立 |
由 Claude spec-generate 系统生成 · 来源:Gumloop Organization Roles 官方帮助文档 + v8.7.0 "Moosonee" Changelog