角色及权限范围
OpenFactory存储组织、单位和团队中的独立角色 水平。角色名称描述了一个范围;这不是一个普遍的许可 自动应用于每个 API 或产品功能。
范围模型
organization membership: owner | admin | member
└── unit membership: unit_admin | base_creator | base_approver | member
└── team membership: team_lead | variant_creator | variant_deployer | variant_user组织成员资格是外部边界。用户必须是组织 管理员可以将他们添加到其单位或团队之一之前。 每个级别的会员资格都经过独立检查;不要推断一个单位或团队 来自另一个上下文中显示的组织角色的角色。
组织角色
当前的组织管理 API 强制执行这些权限:
| 运营 | 业主 | 管理员 | 会员 |
|---|---|---|---|
| 查看组织、成员、组、单位和团队 | 是的 | 是的 | 是的 |
| 编辑组织名称或描述 | 是的 | 是的 | 没有 |
| 创建、编辑或删除群组并管理群组成员 | 是的 | 是的 | 没有 |
| 邀请或删除普通会员 | 是的 | 是的 | 没有 |
| 更改普通成员/管理员角色 | 是的 | 是的 | 没有 |
| 邀请或提升业主 | 是的 | 没有 | 没有 |
| 更改或删除现有所有者 | 是的 | 没有 | 没有 |
| 创建或删除单位 | 是的 | 是的 | 没有 |
| 删除组织 | 是的 | 没有 | 没有 |
| 离开组织 | 是的,除非唯一的所有者 | 是的 | 是的 |
一个组织可以有多个所有者。 API 防止唯一所有者
直到存在其他所有者或组织被删除为止。那里
此 API 中没有单独的“转让所有权”操作;一个所有者改变了另一个所有者
成员的角色为 owner,然后可以按预期更改或删除先前的所有者。
单位角色
组织所有者和管理员可以管理每个单位。在一个单位内,
当前的组织管理 API 授予 unit_admin 以下功能
行政运作:
- 编辑单位;
- 添加、删除和更改单位成员角色;
- 创建、编辑和删除该单元中的团队;
- 添加和管理该单位的团队成员。
只有组织所有者或管理员才能删除单位本身。
base_creator、base_approver 和单元 member 是存储的角色标签
基础映像工作流程策略。组织 CRUD 路由本身并不
证明其他地方的每个创建、批准或部署操作都会强制执行这些操作
标签。验证特定构建或批准的授权行为
工作流程,然后再依赖它作为控件。
团队角色
组织所有者/管理员和上级单位的 unit_admin 可以管理团队
会员资格。 team_lead 可以:
- 编辑团队的名称或描述;
- 添加和删除团队成员;
- 改变团队成员的角色。
team_lead 无法通过当前组织 API 删除团队;
该操作是为组织所有者/管理员或家长保留的
unit_admin。
variant_creator、variant_deployer 和 variant_user 表示预期的
变体工作流程职责。它们不应被视为证明每个
变体端点强制执行完整的创建/编辑/部署矩阵。测试准确
已部署版本中的工作流程和拒绝路径。
组不同
组是组织级别的共享集合,而不是另一个角色层次结构。 所有者和管理员创建群组并管理群组成员资格;所有组织 成员可以列出群组及其成员。团体成员身份并不意味着 用户转变为组织管理员、单位管理员或团队领导。
安全地改变角色
- 确认目标组织、单位或团队。
- 记录用户当前在所有三个范围的有效会员资格。
- 应用一项角色变更。
- 使用该用户自己的操作测试允许的操作和拒绝的操作 会议。
- 检查缓存的 UI 状态和现有会话是否反映了更改。
- 如果您的策略需要的话,请在角色标签之外保留审核记录。
在没有拒绝路径测试的情况下更改标签并不足以证明 强制执行最小特权。
常见的边缘情况
- 管理员无法将任何人提升为所有者或更改现有所有者的角色。
- 用户无法添加到某个单位或团队,除非他们属于该单位或团队 组织。
- 单位和团队成员可以自行撤离;组织成员资格仍然存在 除非单独移除。
- 删除组织成员资格时应检查陈旧的单位、团队、 版本中的分组、共享和会话效果。
- UI 徽章颜色用于展示,而不是安全控制。永远依靠 服务器端授权和拒绝路径测试。