访问控制参考
复制一个包含安装步骤和本插件的完整 Markdown 指南的设置提示
Capgo 使用 基于角色的访问控制(RBAC) 来管理每个团队成员可以做什么。角色按 范围 从整个组织到一个单独的包。
查看管理成员的仪表板视觉教程,请参见 组织.
角色范围
角色范围每个角色都属于一个范围,决定它可以访问的资源。
| 范围 | 适用范围 | 示例用例 |
|---|---|---|
| 组织 | 整个组织及其所有应用 | 你的合伙人获得超级管理员;你的会计获得账单管理员 |
| 应用 | 一个应用及其频道 | 一个承包商在一个应用上工作时获得应用开发者 |
| 频道 | 一个应用中的一个频道 | 一个QA工程师只管理 staging 频道 |
| 包 | 一个单独的包版本 | 一个审阅者需要对一个特定的发布有读取权限 |
一个成员可以持有 一个作用域目标的角色 —例如,一个组织角色,一个App A的角色,和一个App B的不同角色。
组织角色
标题:组织角色这些角色是在邀请成员时分配的。它们授予对整个组织的访问权限。
| 角色 | 内部名称 | 描述 |
|---|---|---|
| 超级管理员 | org_super_admin | 拥有者等级。拥有删除组织、管理账单、转移应用的全部控制权。组织创建者自动获得此角色。 |
| 管理员 | org_admin | 全局管理 — 管理成员、应用、频道。无法删除组织、更新账单、转移应用、或提升用户为超级管理员。 |
| 账单管理员 | org_billing_admin | 账单访问权限:查看和更新账单信息、发票和账单审计日志。无应用或成员访问权限。 |
| 成员 | org_member | 组织权限矩阵 |
组织权限矩阵
权限| 描述 | 超级管理员 | __CAPGO_KEEP_0__ | 管理员 | 账单管理员 | 成员 |
|---|---|---|---|---|---|
org.read | 查看组织 | ✅ | ✅ | ✅ | ✅ |
org.update_settings | 编辑组织名称、Logo、管理邮箱 | ✅ | ✅ | ❌ | ❌ |
org.delete | 永久删除组织 | ✅ | ❌ | ❌ | ❌ |
org.read_members | 查看成员列表 | ✅ | ✅ | ❌ | ✅ |
org.invite_user | 邀请新成员 | ✅ | ✅ | ❌ | ❌ |
org.update_user_roles | 更改成员角色(管理员无法提升为超级管理员 — 角色层级阻止) | ✅ | ✅ | ❌ | ❌ |
org.read_billing | 查看账单信息和当前计划 | ✅ | ✅ | ✅ | ❌ |
org.update_billing | 更新支付方式和计划 | ✅ | ❌ | ✅ | ❌ |
org.read_invoices | 查看发票 | ✅ | ✅ | ✅ | ❌ |
org.read_audit | 查看组织活动日志 | ✅ | ✅ | ❌ | ❌ |
org.read_billing_audit | 查看账单相关审计日志 | ✅ | ✅ | ✅ | ❌ |
可以在所有应用和频道中做到这一点。
应用角色仅限于一个应用。使用这些角色时,团队成员只应在一个应用中工作,而不是整个组织。
| 角色 | 内部名称 | 描述 |
|---|---|---|
| 应用管理员 | app_admin | 对一个应用拥有完全控制权 — 应用频道、设备、应用用户角色。无法删除或转移应用(这些操作是组织级别的)。 |
| 应用开发者 | app_developer | 上传包、管理设备、触发原生构建、更新频道设置。无删除、无应用设置更改、无频道创建。 |
| 应用上传者 | app_uploader | 读取访问权限 + 上传新包版本。 |
| 应用读者 | app_reader | 只读 — 统计、捆绑包、频道、日志、设备。 |
| App 预览 | app_preview | 组织和应用绑定的预览CI生命周期:上传捆绑包并创建预览频道。创建该频道会自动授予该频道的生命周期权限。 |
应用权限矩阵
应用权限矩阵| 权限 | 描述 | 应用管理员 | 应用开发者 | 应用上传者 | 应用读者 |
|---|---|---|---|---|---|
app.read | 查看应用详细信息、统计和元数据 | ✅ | ✅ | ✅ | ✅ |
app.update_settings | 编辑应用设置 | ✅ | ❌ | ❌ | ❌ |
app.read_bundles | 查看已上传的包列表 | ✅ | ✅ | ✅ | ✅ |
app.upload_bundle | 上传新包版本 | ✅ | ✅ | ✅ | ❌ |
app.create_channel | 创建新频道 | ✅ | ❌ | ❌ | ❌ |
app.read_channels | 查看频道 | ✅ | ✅ | ✅ | ✅ |
app.read_logs | 查看更新分发日志 | ✅ | ✅ | ✅ | ✅ |
app.manage_devices | Assign、override或解除设备 | ✅ | ✅ | ❌ | ❌ |
app.read_devices | 查看设备列表 | ✅ | ✅ | ✅ | ✅ |
app.build_native | 触发本地云构建 | ✅ | ✅ | ❌ | ❌ |
app.read_audit | 查看应用级活动日志 | ✅ | ✅ | ✅ | ✅ |
app.update_user_roles | 管理应用范围角色分配 | ✅ | ❌ | ❌ | ❌ |
bundle.delete | 删除包 | ✅ | ❌ | ❌ | ❌ |
应用预览权限集
应用预览权限集使用 应用预览 (app_preview)用于一个组织和应用绑定的CI密钥,该密钥管理PR预览周期,而不提供广泛的应用或组织级别访问。
The app_preview binding grants only these app-level permissions:
| Permission | Allows |
|---|---|
app.read | Read the selected app |
app.read_bundles | Read uploaded bundles |
app.upload_bundle | Upload a bundle |
app.create_channel | Create a channel |
When an App Preview key creates a channel, Capgo automatically gives that key a child channel_preview binding for the new channel only:
| Permission | Allows |
|---|---|
channel.read | 读取该关键创建的频道 |
channel.promote_bundle | 将该关键上传的包设置为该频道 |
channel.delete | 删除该频道 |
因为 app_preview 保留 app.read,该关键可以在选定的应用中枚举频道元数据。自动子绑定是一个 管理 边界:它不会为关键未创建的频道授予生命周期变更。
Capgo 记录了预览关键创建了每个频道并上传了每个包。因此,应用预览关键可以创建它需要的每个非公共预览频道,推广自己的包,并原子性地删除该频道和包 channel delete --delete-bundle;它不能对现有的默认/主频道、另一个预览关键的频道或另一个关键的包执行这些操作。
不包括 app.update_settings,设备或角色管理 channel.update_settings, channel.rollback_bundle、强制设备管理或通用 bundle.delete.
频道角色
频道角色仅限于一个频道。有助于为特定发布频道提供目标访问。
| 角色 | 内部名称 | 描述 |
|---|---|---|
| 频道管理员 | channel_admin | 对一个频道有完全控制权:设置、推送/回滚包、管理强制设备。 |
| 频道浏览者 | channel_reader | 只读 — 当前包、历史记录、强制设备、审计日志。 |
| 频道预览 | channel_preview | 系统分配给创建频道的 App Preview 密钥:读取、推送自己的包、删除该频道。 |
__CAPGO_KEEP_0__
__CAPGO_KEEP_1__| 权限 | 描述 | 频道管理员 | 频道浏览者 | 频道预览者 |
|---|---|---|---|---|
channel.read | 查看频道及其当前的包 | ✅ | ✅ | ✅ |
channel.update_settings | 编辑频道设置(平台开关,更新策略…) | ✅ | ❌ | ❌ |
channel.delete | 删除频道 | ✅ | ❌ | ✅ |
channel.read_history | 查看包分配历史 | ✅ | ✅ | ❌ |
channel.promote_bundle | 设置频道的活动包 | ✅ | ❌ | ✅ |
channel.rollback_bundle | 回滚到之前的包 | ✅ | ❌ | ❌ |
channel.manage_forced_devices | 强制特定设备使用此频道 | ✅ | ❌ | ❌ |
channel.read_forced_devices | 查看强制设备列表 | ✅ | ✅ | ❌ |
channel.read_audit | 查看频道活动日志 | ✅ | ✅ | ❌ |
包角色
包角色仅限于一个包版本。很少需要 — 大多数团队使用应用级别角色
| 角色 | 内部名称 | 描述 |
|---|---|---|
| 包管理者 | bundle_admin | 读取、更新和删除特定包的元数据。 |
| 包浏览者 | bundle_reader | 渠道权限覆盖(控制台) |
渠道权限覆盖(控制台)
在控制台中,渠道访问由用户的应用角色决定。为了实现更细致的控制,您可以覆盖特定渠道权限 在不改变用户或组应用角色的情况下,针对每个用户或组覆盖特定渠道权限 在控制台中,渠道访问由用户的应用角色决定。为了实现更细致的控制,您可以在不改变用户或组应用角色的情况下,针对每个用户或组覆盖特定渠道权限。
从应用的 访问 tab 点击用户下方的频道权限按钮(盾牌图标) 请参阅
组织 — 覆盖频道权限
覆盖权限| 标题:覆盖权限 | 权限 | 描述 |
|---|---|---|
| 默认行为 | 读取 | 从应用角色继承 |
| 历史 | 查看分组分配历史 | 从应用角色继承 |
| 关联分组 | 设置或更改渠道上的活动分组 | 从应用角色继承 |
每个权限可以设置为:
- 默认 — 从应用角色继承(默认)
- 允许 — 明确授予,忽略应用角色
- 拒绝 ——明确阻止,無論應用程式角色
這樣你可以,例如,給 App Reader 能力將套件與 App Developer staging 角色層級
標題:角色層級
角色形成層級。父角色繼承所有權限 的子角色 可以做任何 org_admin 可以做的 app_admin ,而 channel_admin 可以做的,依此類推。
Super Admin (org_super_admin) └── Admin (org_admin) └── App Admin (app_admin) ├── App Developer (app_developer) │ └── App Uploader (app_uploader) │ └── App Reader (app_reader) ├── Bundle Admin (bundle_admin) │ └── Bundle Viewer (bundle_reader) └── Channel Admin (channel_admin) └── Channel Viewer (channel_reader)实践中是如何工作的:
- 一个 组织级别的 管理员 可以在组织中所有应用程序上执行的所有操作,一个 应用程序管理员
- 可以执行的所有操作。 一个 应用程序管理员 在一个特定的应用程序上可以执行的所有操作,一个 频道管理员在该应用程序中所有频道上可以执行的所有操作。
- 一个 应用开发者 可以做一个 应用上传者 可以做的所有事情,甚至更多。
等级结构只会向下流动 — 不会获得组织级别权限,即使他们也持有应用级别角色。 channel_admin 组
等级结构只会向下流动 —— 不会获得组织级别权限,即使他们也持有应用级别角色。 组 并将角色分配给该组。组中的每个成员都会自动继承这些角色。
如何组工作
标题:如何组工作- 一个组属于 一个组织 —它不能跨越多个组织。
- 组可以在 任何范围: 组织、应用、频道或包。例如,一个组可以被赋予 应用开发者 角色在应用A上,并且 频道管理员 在 App B 的
staging频道上 - 当用户权限被评估时,所有他们的组成员身份都会透明地被解析。如果他们的任何组授予所需的权限,访问将被允许。
- 一个用户可以属于 多个组,并且所有组的权限都是累积的。
- 组权限仅适用于 用户主体 —— API 键不继承组角色。
何时使用组
何时使用组| 场景 | 没有组 | 有组 |
|---|---|---|
| 5名QA工程师需要对3个应用程序拥有开发者权限 | 15个单独的角色绑定 | 1个组+3个角色绑定 |
| 有人加入QA团队 | 手动添加3个角色绑定 | 将他们添加到组 |
| 有人离开QA团队 | 手动删除3个角色绑定 | 将他们从组中移除 |
通过 API 管理组
标题:通过 API 管理组所有组端点都需要身份验证,并在 __CAPGO_KEEP_0__ 下提供 /private/groups.
列出组
标题:列出组curl -X GET "https://api.capgo.app/private/groups/<ORG_ID>" \ -H "authorization: <API_KEY>"需要 org.read_members 权限。
创建组
标题:创建组curl -X POST "https://api.capgo.app/private/groups/<ORG_ID>" \ -H "authorization: <API_KEY>" \ -H "Content-Type: application/json" \ -d '{ "name": "QA Team", "description": "Quality assurance engineers" }'需要 org.update_user_roles 权限(超级管理员 或 需要).
管理员
更新一个组curl -X PUT "https://api.capgo.app/private/groups/<GROUP_ID>" \ -H "authorization: <API_KEY>" \ -H "Content-Type: application/json" \ -d '{ "name": "QA Team", "description": "Updated description" }'删除一个组
删除一个组curl -X DELETE "https://api.capgo.app/private/groups/<GROUP_ID>" \ -H "authorization: <API_KEY>"删除一个组也会移除所有其角色绑定。组织中的成员不会被删除。
列出组成员
标题:列出组成员curl -X GET "https://api.capgo.app/private/groups/<GROUP_ID>/members" \ -H "authorization: <API_KEY>"将成员添加到组
标题:将成员添加到组curl -X POST "https://api.capgo.app/private/groups/<GROUP_ID>/members" \ -H "authorization: <API_KEY>" \ -H "Content-Type: application/json" \ -d '{ "user_id": "<USER_UUID>" }'用户必须已经是组织的成员。添加一个现有成员是无操作的。
移除组成员
移除组成员curl -X DELETE "https://api.capgo.app/private/groups/<GROUP_ID>/members/<USER_UUID>" \ -H "authorization: <API_KEY>"列表成员
成员列表curl -X GET "https://api.capgo.app/organization/members" \ -H "authorization: <API_KEY>" \ -H "Content-Type: application/json" \ -d '{ "orgId": "<ORG_ID>" }'响应:
[ { "uid": "user-uuid", "email": "alice@example.com", "image_url": "https://...", "role": "org_admin", "is_tmp": false }]邀请成员
邀请成员curl -X POST "https://api.capgo.app/organization/members" \ -H "authorization: <API_KEY>" \ -H "Content-Type: application/json" \ -d '{ "orgId": "<ORG_ID>", "email": "bob@example.com", "invite_type": "org_admin" }'可接受的值 invite_type:
| 值 | 分配的角色 |
|---|---|
org_super_admin | 超级管理员 |
org_admin | 管理员 |
org_billing_admin | 账单管理员 |
org_member | 成员 |
移除成员
移除成员curl -X DELETE "https://api.capgo.app/organization/members" \ -H "authorization: <API_KEY>" \ -H "Content-Type: application/json" \ -d '{ "orgId": "<ORG_ID>", "email": "bob@example.com" }'列表组织
组织列表npx @capgo/cli organization list --apikey <API_KEY>成员列表
标题:成员列表npx @capgo/cli organization members <ORG_ID> --apikey <API_KEY>自定义角色
标题:自定义角色内置角色覆盖了大多数团队结构。自定义角色创建已在我们的路线图上 — 如果您的团队需要这个功能, 联系我们您的使用场景将直接帮助我们优先考虑此功能。
继续阅读 Access Control Reference
标题:继续阅读 Access Control Reference如果您正在使用 Access Control Reference 来规划仪表板和API操作,连接它到 API Overview 查看API Overview中的实现细节 简介 查看简介中的实现细节 API Keys 为API Keys的实现细节 设备 为设备的实现细节,并且 包 为包的实现细节。