初始上下文

产品/团队
Gumloop / AI Agent 平台
功能
Composable Roles — 可加、可组合的 RBAC 角色系统
描述
角色采用加性(additive)设计,成员可同时持有多个角色,有效权限为所有角色的并集。Member 是隐式基线。组织级角色(Admin/Manager/Security/Developer/Analytics/Templates)+ 团队级角色(Team Admin/Team Member)+ 自定义角色(减法模型)三层构成完整权限体系。权限解析遵循 Roles(天花板)→ Item Sharing(逐项覆写)→ Custom Roles(减法)三级链条
动机
传统 RBAC 系统依赖层级继承(admin > manager > member),难以表达「某人既管理安全策略又编辑模板」这种交叉权限。Gumloop 的加性模型允许按需堆叠细粒度角色,避免为每一种权限组合创建新角色
目标用户与痛点
(1) 中型团队(10–50 人)需要超越 Admin/Member 二元的细粒度权限 (2) 有合规需求的企业需要安全角色与管理角色分离 (3) 模板管理员、数据分析师等跨职能角色需要部分管理权而非全部
平台范围
Web 端(组织设置 → Members 页面)
关键成功指标
自定义角色创建量、多角色成员占比、Security 角色独立激活率(Enterprise)
评分回顾:7/13(战略 2 护城河 1 用户 2 复杂度 1 创新 1)。角色系统是 SaaS 平台的基础设施。加性设计在同类产品中常见(Slack 也有类似思路),独立护城河有限。但减法型自定义角色(特别是 app allowlist / node denylist / concurrency limit 三层)在 AI Agent 平台场景下构成差异化能力。

1. 概览

背景

Gumloop v8.7.0 "Moosonee" 确立了 Composable Roles 的核心设计:角色可加、可组合。不同于传统层级式 RBAC(每用户一个角色,权限向下继承),Gumloop 允许成员持有多个角色,有效权限 = 所有角色权限的并集。

角色分为两类:

  • Admin 角色(广泛):Admin、Manager — 覆盖多个领域的管理权
  • Feature 角色(聚焦):Security、Developer、Analytics、Templates — 聚焦单一领域

这种设计解决了「某人需要管理安全策略但不应看到财务数据」的场景 — 只需授予 Security 角色而不给 Admin。

设计原则

  1. 加性优先:授予角色只会增加权限,不会减少。行为可预测
  2. 最少特权:从 Member 基线开始,按需叠加最窄的角色
  3. 关注点分离:安全、开发、分析、模板管理各自独立为 Feature 角色
  4. 减法建模:唯一减少权限的机制是自定义角色(Custom Roles),提供精确的 deny-list 控制
  5. 三级裁决:角色天花板 → 逐项分享覆盖 → 自定义角色减法,全部同意才放行

目标

  1. 消除角色爆炸:通过组合现有角色覆盖权限矩阵,无需为每个组合创建新角色
  2. 安全与便利解耦:Security 角色独立于 Admin,企业可将安全策略控制委托给专人而不授予完全管理权
  3. 精确减法控制:自定义角色提供白名单/黑名单/并发限制,满足严格合规场景
  4. 跨组织与团队的权限一致性:同一套解析逻辑适用于组织级和团队级资源

2. 核心机制

2.1 加性设计

角色为加性(additive)可组合(composable)。成员可同时持有多个角色,最终有效权限 = 所有持有角色权限的并集。Member 是隐式基线 — 所有成员自动拥有 Member 权限,即使未显式分配。

有效权限 = Member (基线) ∪ Role_A ∪ Role_B ∪ ... ∪ Role_N

关键行为:

  • 授予角色永远增加权限,从不减少
  • 移除角色的唯一效果是收回该角色贡献的权限
  • 组织角色与团队角色可以共存,互不冲突

2.2 组织角色矩阵

角色类别计划要求核心权限可分配角色
AdminAdminPro+全部:计费、SSO、成员管理、审计日志、应用策略、MCP、所有内容所有角色
ManagerAdminPro+成员管理、凭据管理、分析数据、模板管理Analytics、Templates、Member
MemberFeature全部计划创建内容、创建团队、个人凭据无(基线)
SecurityFeatureEnterprise自定义角色、应用策略、AI 模型访问控制、应用活动日志、MCP 管理Developer
DeveloperFeatureEnterprise托管/代理 MCP、自有服务器活动
AnalyticsFeatureEnterprise组织级分析、用量数据、数据导出
TemplatesFeaturePro+模板库管理

角色能力速查

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 在语义上区分。

2.3 团队角色

团队角色在团队范围内生效,与组织角色并行:

团队角色权限范围说明
Team Admin团队内全部内容、凭据、分析、成员管理最高团队权限
Team Member团队内容只读团队基线

关键规则:

  • 组织 Admin 持有 organization:manage_team_access → 可管理任何团队,无论其团队角色
  • 团队角色仅影响团队范围内的资源,不影响组织级权限

2.4 自定义角色(减法模型)

自定义角色是一个独立的、减法型系统。与标准角色的加性逻辑相反:

  • 只移除权限,不授予新权限
  • 多个自定义角色组合时,限制叠加(更严)
  • 新邀请成员自动加入默认自定义角色
控制类型机制场景示例
App 白名单只允许成员使用指定的应用/工具「实习生只能使用 Slack 和 Email 节点」
Node 黑名单禁止成员使用特定节点类型「禁止使用 HTTP Request 节点」
并发限制限制成员同时运行的 Agent 数量「每个成员最多同时运行 3 个 Agent」

2.5 三级权限解析

权限解析按以下顺序逐级裁决,全部同意才放行:

请求访问资源
    │
    ▼
┌──────────────────────────────────────┐
│ Layer 1: Roles(天花板)              │
│ 有效权限 = 所有组织角色 ∪ 所有团队角色  │
│ → 确定权限上限(ceiling)              │
└──────────────────┬───────────────────┘
                   ▼
┌──────────────────────────────────────┐
│ Layer 2: Item Sharing(逐项覆写)      │
│ 资源所有者可授予:Editor/Viewer/Use-only│
│ → 逐项放宽或限制访问                   │
└──────────────────┬───────────────────┘
                   ▼
┌──────────────────────────────────────┐
│ Layer 3: Custom Roles(减法)          │
│ 从前两层允许的权限中减去限制项           │
│ → 精确 deny-list                      │
└──────────────────┬───────────────────┘
                   ▼
              允许 / 拒绝

关键约束:

  • Layer 2(Sharing)不能超越 Layer 1(Roles 天花板)— 分享不能授予角色未覆盖的权限
  • Layer 3(Custom Roles)只能从 Layer 1+2 的并集中减去 — 不能反向授予
  • 所有三层都必须同意,操作才能成功
示例
成员持有:Member + Templates
Layer 1 天花板:content:create + team:create + templates:*
Layer 2:某模板被所有者设为 "Use-only"
Layer 3:自定义角色禁止 "删除模板"
→ 该成员可以使用此模板,但不能编辑或删除

3. 功能需求

模块 A:角色定义

ID需求优先级状态
A1系统预定义 7 个组织级角色(Admin/Manager/Member/Security/Developer/Analytics/Templates)P0已实现
A2系统预定义 2 个团队级角色(Team Admin/Team Member)P0已实现
A3Admin 角色拥有 organization:manage_team_access 能力,可管理任意团队P0已实现
A4Member 角色作为隐式基线,所有用户自动持有P0已实现
A5Feature 角色(Security/Developer/Analytics/Templates)按计划层级解锁P1已实现
A6自定义角色支持 App 白名单、Node 黑名单、并发限制三类策略P0已实现

模块 B:角色分配

ID需求优先级状态
B1一个成员可同时持有多个组织角色P0已实现
B2一个成员可同时持有组织角色和团队角色P0已实现
B3Admin 可分配所有角色,Manager 可分配 Analytics/Templates/MemberP0已实现
B4Security 角色可分配 Developer 角色P1已实现
B5新邀请成员自动加入默认自定义角色P0已实现
B6角色变更实时生效,无需重新登录P1推断

模块 C:权限解析

ID需求优先级状态
C1有效权限 = 所有持有角色权限的并集(加性)P0已实现
C2三级解析链:Roles → Item Sharing → Custom RolesP0已实现
C3Item Sharing 不得超过 Roles 天花板P0已实现
C4Custom Roles 只能减法,不能反向授予P0已实现
C5所有三层同意,操作才放行P0已实现
C6多个自定义角色组合时,取最严格限制P1已实现

模块 D:自定义角色管理

ID需求优先级状态
D1创建/编辑/删除自定义角色P0已实现
D2自定义角色支持 App 白名单配置P0已实现
D3自定义角色支持 Node 黑名单配置P0已实现
D4自定义角色支持并发数量限制P0已实现
D5自定义角色仅限 Enterprise 计划(通过 Security 角色管理)P1已实现
D6自定义角色变更即时生效P1推断

4. 竞争分析

维度GumloopGitHub Org RolesSlack RolesAWS 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/并发)仓库级细粒度简单直观极灵活但学习曲线陡峭

竞争洞察

5. 未来演进方向

5.1 短期(v8.x – v9.x)

  • 权限可视化面板:Admin 在分配角色时实时预览「最终有效权限」,降低组合误解风险
  • 角色变更审计日志增强:记录每次角色变更的完整上下文(谁、何时、被谁分配、哪个 IP)
  • 资源级分享增强:Item Sharing 目前为 Editor/Viewer/Use-only 三级,考虑增加「限时分享」和「分享链接过期」
  • 自定义角色预设模板:提供常见场景的预设(如「实习生模式」、「外包模式」、「只读审计模式」)

5.2 中期(v10.x+)

  • 基于属性的访问控制(ABAC):在 RBAC 基础上叠加标签/属性维度,如「只允许编辑带有 project=marketing 标签的工作流」
  • 时间绑定的角色:支持临时角色分配(如「24 小时内临时 Admin 用于紧急维护」),到期自动回收
  • 跨组织角色委托:支持大型企业场景下,某组织的 Admin 将特定资源的管理权委托给另一个组织

5.3 长期探索

  • 策略即代码(Policy as Code):允许通过 IaC 方式声明自定义角色,纳入版本管理和 CI/CD 流程
  • 冲突检测引擎:当多个自定义角色产生矛盾限制时,引擎自动标记并被解除(目前取最严格交集,但极端情况下可能产生空权限集)

6. 最佳实践

  1. 从最简开始:新成员仅授予 Member,按实际需要叠加最窄的角色。避免默认授予 Manager 或 Admin
  2. 优先 Feature 角色:需要安全管理时授予 Security 而非 Admin — 「管理安全的人不需要看到计费信息」
  3. 季度审查:每季度审查所有成员的角色持有情况,防止角色累积(role accumulation)导致的权限膨胀
  4. 自定义角色作为安全网:将自定义角色视为「组织安全基线」— 所有成员默认至少套用一个自定义角色,限制高风险操作

源文档参考
文档路径/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