组织、项目与 RBAC
组织(Organization)是团队协作与计费的主体;项目(Project)是数据隔离的单位;你在组织中的 **角色(Role)**决定你能做什么。三层模型总览见 账户与组织概览。
四种角色
基于角色的访问控制(RBAC)采用四级递进角色,等级从低到高:
| 角色 | 定位 |
|---|---|
VIEWER | 只读:查看项目数据与组织基本信息 |
MEMBER | 日常使用:在 VIEWER 基础上可读写项目数据 |
ADMIN | 组织管理:管理成员、项目、计费,几乎全权 |
OWNER | 组织所有者:全权;每个组织任意时刻至少保留 1 个 OWNER |
权限判定按「等级 ≥ 要求」放行(例如要求 ADMIN 的操作,OWNER 同样可做)。创建组织的人自动成为
OWNER。
角色 × 操作权限矩阵
以下操作与角色要求均以当前实现为准(🔐 = 额外要求 step-up 二次验证):
| 操作 | OWNER | ADMIN | MEMBER | VIEWER |
|---|---|---|---|---|
| 查看项目 / 成员 / DSN key 列表 | ✅ | ✅ | ✅ | ✅ |
查看订阅与用量(/settings/billing/usage) | ✅ | ✅ | ✅ | ✅ |
| 查看项目数据(日志 / 崩溃 / APM / 埋点 / Trace) | ✅ | ✅ | ✅ | ✅ |
| 创建项目 | ✅ | ✅ | ❌ | ❌ |
| 轮换 DSN key | ✅ 🔐 | ✅ 🔐 | ❌ | ❌ |
| 邀请成员 | ✅ | ✅ | ❌ | ❌ |
| 修改成员角色 / 移除成员 | ✅ 🔐 | ✅ 🔐 | ❌ | ❌ |
| 查看组织审计日志 | ✅ | ✅ | ❌ | ❌ |
| 升级套餐 / Stripe Portal / 查看发票 | ✅ | ✅ | ❌ | ❌ |
| 提交数据删除请求(GDPR) | ✅ 🔐 | ✅ 🔐 | ✅ 🔐 | ✅ 🔐 |
| 创建 / 吊销自己的 PAT | ✅ 🔐 | ✅ 🔐 | ✅ 🔐 | ✅ 🔐 |
配套的保护机制:
- 最后一个 OWNER 保护:把组织中最后一个
OWNER降级或移除会被拒绝 (409 org.last_owner_protected)——先给其他成员授予OWNER再操作。 - 跨租户防枚举:访问不属于你的组织 / 项目统一返回
404(而非 403),不暴露资源存在性。 - 配额拦截:创建项目、发送邀请会分别校验套餐的项目数 / 席位配额,超限返回
402, 详见 套餐、配额与计费。
更细的项目级成员、自定义角色(EE)等仍在规划中;当前角色作用于整个组织。
邀请成员
发送邀请(Console:/org/invitations)
填写受邀邮箱、选择角色(VIEWER / MEMBER / ADMIN / OWNER,默认 MEMBER)后 Send。
需要 ADMIN 及以上角色;若「现有成员 + 待处理邀请」已达套餐席位数,会被拦截并提示升级。
受邀人接受
受邀人收到带链接的邮件(/onboarding/accept-invitation/{token}),邀请 48 小时内有效。
接受时必须以受邀邮箱对应的账号登录(未注册先注册),邮箱不一致会被拒绝
(403 email_mismatch)。拒绝邀请无需登录。
查看待处理邀请
/org/invitations 列表展示 Email / Role / Sent / Expires。同一邮箱在同一组织只能有一条邀请。
项目管理
创建项目(Console:/org/projects)
左栏点 + 新建,填:
Slug:3-64 位小写字母 / 数字 / 连字符,组织内唯一;Name:显示名称;Platform:web/ios/android/flutter/react-native。
创建成功即自动颁发一把默认 DSN key,并弹窗展示完整 DSN(含 secret,仅此一次)——请立即复制。 项目数量受套餐配额限制,配额已满时按钮禁用并提示升级。
DSN keys 管理
每个项目持有一或多把客户端密钥(DSN key),是 SDK 上报的唯一凭证。签名机制见 DSN 与 HMAC 签名。
- 格式:公钥
argus_pk_+ 32 位十六进制;密钥argus_sk_+ 64 位十六进制。完整 DSN 形如argus://<public_key>:<secret_key>@<host>/<project_id>(以<>表示占位)。 - 查看:
/org/projects右栏 DSN keys 表格(Name / Public / Secret hint / Status)。 secret 服务端加密存储(AES-256-GCM),任何页面都不再显示明文,只保留末位提示。 - 轮换(Rotate):右栏 Rotate DSN 按钮,需
OWNER/ADMIN+ step-up。行为是 先颁发新 key、再吊销全部旧 active key;旧 secret 仅在上报网关的短暂缓存窗口 (约 60 秒)内仍可用,请把轮换视为「即时失效」,轮换后立刻更新所有客户端配置。 - 吊销(Revoke):
DELETE /v1/keys/{keyID}(需 step-up)。被吊销的 key 上报一律被拒 (401 revoked_dsn)。
丢失 secret 无法找回,只能 Rotate 重发。怀疑 DSN 泄露时应立即轮换,并在 审计日志 中核对相关操作记录。
Console 使用速查
| 想做什么 | 去哪里 |
|---|---|
| 切换当前组织 / 项目 | 左上角 Project Switcher |
| 查看 / 管理成员角色 | /org/members |
| 邀请成员 | /org/invitations |
| 创建项目、查看 / 轮换 DSN keys | /org/projects |
| 组织审计日志 | /org/audit |
FAQ
ADMIN 和 OWNER 差在哪?
日常管理(成员、项目、计费、邀请)两者相同。差异在组织命运级操作:只有 OWNER 不受「最后一个
OWNER 保护」约束之外的降级限制,且组织必须始终保有至少一个 OWNER。
能把某个成员限制到单个项目吗? 目前角色作用于整个组织,项目级授权在规划中。可以用独立组织做硬隔离。
邀请过期了怎么办?
邀请 48 小时后过期,直接在 /org/invitations 重新发送一条新邀请即可。
轮换 DSN 会丢数据吗? 轮换期间客户端若仍持旧 secret,超出缓存窗口后的上报会被拒绝(SDK 会本地缓存降级队列,恢复后 重传,具体能力视各端 SDK 而定,见 SDK 统一框架)。建议在发布窗口内 完成轮换与配置更新。
移除成员会删掉 TA 产生的数据吗? 不会。项目数据归属项目本身;移除成员只回收访问权限。