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" → 只读用户角色

通过上述设计,用户与角色管理实现了认证源的灵活接入、角色层级的清晰划分、以及继承与互斥的严格约束,为后续的审批工作流和变更记录审计奠定了坚实的权限基础。