2. 权限模型基础:RBAC与ABAC模型简介、归档包权限的粒度划分、最小权限原则在归档场景的应用
2.1 两大主流权限模型:RBAC 与 ABAC
在归档包权限体系的设计中,RBAC(基于角色的访问控制)与ABAC(基于属性的访问控制)是两种最核心的理论模型。理解它们的差异,是正确配置归档包权限的前提。
| 对比维度 | RBAC(基于角色) | ABAC(基于属性) |
|---|---|---|
| 授权依据 | 用户所属的角色(如:归档管理员、审计员) | 用户、资源、环境的多维属性组合 |
| 粒度控制 | 粗粒度到中粒度(角色→权限集) | 细粒度到极细粒度(属性表达式) |
| 变更灵活性 | 需修改角色-权限映射或新建角色 | 动态调整属性规则,无需修改角色结构 |
| 适用场景 | 组织架构稳定、权限分类明确的归档环境 | 多租户、合规标签、临时授权等复杂场景 |
| 管理复杂度 | 较低,角色数量可控 | 较高,需维护属性字典与策略引擎 |
实践建议:大多数归档系统采用 RBAC 为主、ABAC 为辅 的混合模型。基础权限(如“创建归档包”“下载归档包”)通过角色分配;敏感操作(如“跨部门调阅”“删除已封存包”)则叠加 ABAC 属性规则进行二次校验。
2.2 归档包权限的粒度划分
归档包的权限粒度直接影响安全性与运维效率。根据实际生产经验,建议按以下层级进行划分:
- 系统级粒度:控制是否允许访问归档模块,通常由全局管理员分配。
- 存储库级粒度:按存储库(Repository)隔离权限,不同部门或项目组拥有独立库。
- 归档包级粒度:针对单个归档包的读取、下载、删除、修改标签等操作。
- 文件级粒度:控制归档包内特定文件的查看或提取权限(适用于敏感文档归档)。
- 操作级粒度:区分“创建”“审核”“封存”“解封”“删除”等生命周期操作。
| 粒度层级 | 典型权限项 | 推荐模型 | 性能影响 |
|---|---|---|---|
| 系统级 | 访问归档模块 | RBAC | 低 |
| 存储库级 | 查看库列表、跨库检索 | RBAC | 低 |
| 归档包级 | 读取元数据、下载包体 | RBAC + ABAC | 中 |
| 文件级 | 预览/提取包内特定文件 | ABAC | 较高 |
| 操作级 | 创建、审核、封存、删除 | RBAC + ABAC | 中 |
粒度选择原则:在满足合规要求的前提下,尽量使用 归档包级 作为默认粒度。文件级权限会显著增加策略评估开销,仅在包含“机密级”或“个人隐私”数据的归档包中启用。
2.3 最小权限原则在归档场景的应用
最小权限原则(Principle of Least Privilege, PoLP)要求每个主体只拥有完成其任务所必需的最小权限集合。在归档包权限配置中,落实 PoLP 需要关注以下三个关键动作:
- 角色职责分离:将“创建归档包”“审核归档包”“封存归档包”“删除归档包”分配给不同角色,避免单人拥有完整生命周期控制权。
- 临时权限自动回收:对于紧急调阅或跨部门协作场景,使用 ABAC 属性规则设置 时间窗口 或 次数限制,过期自动失效。
- 默认拒绝策略:所有未显式授权的操作默认拒绝。归档包创建时,仅授予创建者“读取”和“修改元数据”权限,不自动授予“删除”或“封存”权限。
常见误区:不要将“归档管理员”角色赋予所有归档操作权限。正确的做法是将“创建”“审核”“封存”“删除”拆分为独立角色,并配合 ABAC 规则限制操作范围(如:只能操作本部门归档包)。否则一旦角色被滥用或账号泄露,攻击者可一次性删除所有归档数据。
2.4 权限模型选择决策树
在实际项目中,可通过以下决策步骤快速确定归档包的权限模型:
- 步骤 1:判断组织架构是否稳定且角色清晰 → 是则优先使用 RBAC。
- 步骤 2:判断是否存在跨部门、跨项目调阅需求 → 是则叠加 ABAC 属性规则。
- 步骤 3:判断是否需要控制归档包内单个文件的访问 → 是则启用文件级 ABAC。
- 步骤 4:判断是否需要临时授权(如:外部审计) → 是则使用 ABAC 时间/次数属性。
- 步骤 5:最终形成“RBAC 基础角色 + ABAC 动态策略”的混合权限矩阵。
| 场景 | 推荐模型 | 示例策略 |
|---|---|---|
| 内部员工日常归档 | RBAC | 角色“归档员”可创建和读取本库归档包 |
| 跨部门合规调阅 | RBAC + ABAC | 角色“合规审计员”+ 属性“部门=财务部”+ 时间“工作日 9:00-18:00” |
| 外包人员临时维护 | ABAC | 属性“角色=维护员”+“IP 范围=公司 VPN”+“有效期=7 天” |
| 归档包内涉密文件提取 | ABAC | 属性“文件密级=机密”+“用户安全等级=二级以上”+“审批单号=必填” |
接口调用提示:在后续章节的 API 设计中,RBAC 角色信息通常放在 JWT 的
roles 字段中;ABAC 属性则通过请求头 X-Abac-Attributes 或请求体中的 context 对象传递。权限评估结果由后端策略引擎统一返回,前端仅展示允许的操作按钮。