4. 用户与角色管理
用户与角色管理是权限体系的基石。本章围绕三个核心维度展开:用户身份认证方式(解决“你是谁”)、角色定义与层级设计(解决“你能做什么”)、角色继承与互斥规则(解决“角色间如何协作与隔离”)。
4.1 用户身份认证方式
归档包权限系统支持三种认证源,可根据企业安全策略灵活切换或组合使用。
| 认证方式 | 适用场景 | 优势 | 注意事项 |
|---|---|---|---|
| LDAP | 企业内网、AD 域控环境 | 集中管理、密码策略统一、支持组同步 | 需维护 LDAP 连接池,避免认证风暴 |
| OAuth 2.0 | 跨系统 SSO、第三方登录(GitLab/Jenkins) | 无密码传递、支持令牌刷新、审计链路完整 | 令牌有效期与刷新策略需与归档包生命周期对齐 |
| 本地认证 | 开发环境、离线场景、小型团队 | 零依赖、部署简单、适合快速原型 | 密码哈希必须使用 bcrypt/Argon2,禁止明文存储 |
工程建议:生产环境推荐“LDAP + OAuth”双通道模式——内部员工走 LDAP,外部合作方走 OAuth。本地认证仅作为应急降级方案,且需开启 IP 白名单限制。
4.2 角色定义与层级设计
基于 RBAC(基于角色的访问控制)模型,我们定义了四个标准角色,形成清晰的权限金字塔。
角色层级(从高到低): 管理员 → 审核员 → 开发者 → 只读用户
| 角色 | 权限范围 | 典型操作 |
|---|---|---|
| 管理员 | 全局配置、角色分配、审计日志 | 创建/删除归档包、修改审批流、管理用户 |
| 审核员 | 审批节点操作、查看待审批列表 | 通过/驳回变更请求、查看变更差异 |
| 开发者 | 提交变更、查看自己发起的记录 | 上传归档包、发起审批、查看历史版本 |
| 只读用户 | 查看已发布的归档包与变更记录 | 浏览、搜索、导出报告 |
4.3 角色继承与互斥规则
角色之间并非孤立存在,需要定义清晰的继承链和互斥约束,防止权限滥用或越权。
4.3.1 角色继承规则
- 向下继承:高等级角色自动继承低等级角色的所有权限。例如:管理员自动拥有审核员、开发者、只读用户的全部权限。
- 权限叠加:当用户被赋予多个角色时,权限取并集。例如:用户同时拥有“开发者”和“审核员”角色,则既可提交变更,也可审批变更。
- 显式覆盖:允许在特定资源上显式拒绝权限,拒绝优先级高于继承。例如:即使管理员角色,也可在某个敏感归档包上设置“禁止访问”。
4.3.2 角色互斥规则(SoD)
职责分离(Separation of Duties)是合规审计的核心要求。以下互斥规则必须强制执行:
| 互斥对 | 风险说明 | 处理方式 |
|---|---|---|
| 管理员 ↔ 审核员 | 管理员若同时为审核员,可绕过审批直接发布 | 系统强制禁止同一用户同时拥有这两个角色 |
| 开发者 ↔ 审核员(同项目) | 开发者审核自己的变更,失去独立监督 | 允许跨项目兼任,但同项目内互斥 |
| 管理员 ↔ 只读用户 | 逻辑冲突,管理员权限远大于只读 | 自动降级:当用户被赋予管理员时,自动移除只读角色 |
关键约束:互斥规则必须在角色分配时实时校验,并在用户界面给出明确提示。禁止在审批流运行时才检测互斥,避免流程卡死。
4.4 用户-角色映射与最佳实践
在实际工程中,用户与角色的绑定推荐通过组(Group)间接实现,而非直接给用户分配角色。这样做的好处:
- 批量管理:一个组对应一个角色,人员变动时只需调整组成员关系。
- 审计清晰:通过组变更日志可追溯角色授予的源头。
- LDAP 同步:企业 LDAP 中的组织单元(OU)可直接映射为角色组,减少手动维护。
推荐映射模式:
LDAP 组 "cn=archive-admins,ou=groups,dc=example,dc=com" → 管理员角色
LDAP 组 "cn=archive-reviewers,ou=groups,dc=example,dc=com" → 审核员角色
LDAP 组 "cn=archive-devs,ou=groups,dc=example,dc=com" → 开发者角色
LDAP 组 "cn=archive-readers,ou=groups,dc=example,dc=com" → 只读用户角色
LDAP 组 "cn=archive-admins,ou=groups,dc=example,dc=com" → 管理员角色
LDAP 组 "cn=archive-reviewers,ou=groups,dc=example,dc=com" → 审核员角色
LDAP 组 "cn=archive-devs,ou=groups,dc=example,dc=com" → 开发者角色
LDAP 组 "cn=archive-readers,ou=groups,dc=example,dc=com" → 只读用户角色
通过上述设计,用户与角色管理实现了认证源的灵活接入、角色层级的清晰划分、以及继承与互斥的严格约束,为后续的审批工作流和变更记录审计奠定了坚实的权限基础。