各位好,我是代码搬运工。平时搬砖搬惯了,今天搬一块档案信息化领域的砖——聊聊会博通档案系统里的数据脱敏功能。不为别的,这套设计里的几个权限模型细节,做业务系统的同学都可以抄作业。

背景:文件级权限的粒度困局
做文档类系统的都绕不开一个问题:权限控制的粒度。
文件级权限(能不能访问这个文件)实现简单,一个ACL就搞定。但档案场景里,真实的权限需求是区域级的:同一份PDF,A角色可以看全部,B角色只能看去掉身份证号、薪酬字段之后的版本。
粗暴方案是复制多份文件、各配权限——数据冗余,一致性噩梦。合理方案是单份文件 + 区域遮蔽规则 + 按人渲染。会博通走的是后者,我们看看它的规则模型。
规则模型一:脱敏框(区域定义)
管理员在PDF预览界面进入编辑模式,鼠标拖拽生成脱敏框——本质是页面上的一个矩形区域坐标。未授权用户请求渲染时,框内内容呈现遮蔽状态。
工程上值得注意的点:
支持单文件多框,框可多选后批量配置规则,批量调整后需显式点击"批量调整确认",全部配置完成后再"修改确认"才落库生效。两步确认的设计牺牲了一点操作顺滑度,换来的是防误操作——权限类配置的修改,宁可多一步确认。
脱敏框支持按已配置的人员/组织检索,命中框体高亮。这个功能对应的运维场景是人员变动:搜索一个名字,定位所有关联的脱敏规则,逐一复核。做权限系统的都懂,规则的"可查询性"和规则本身一样重要。
规则模型二:作用域隔离(条目级 vs 流程级)
这是整套设计里最漂亮的部分。脱敏分两种作用域:
条目脱敏:规则挂在档案条目上,所有引用该条目的借用流程同步继承脱敏效果。相当于全局默认策略。
流程内脱敏:规则挂在流程实例的附件上,只在当前流程生命周期内生效,不回写原始条目。相当于局部临时策略。
用代码思维类比:条目脱敏是基类里的默认配置,流程内脱敏是某个实例运行时覆盖的局部配置,覆盖不污染基类。临时授权场景(专项审计、外部检查)用流程级,结构性敏感字段(证件号、薪酬)用条目级,两个作用域互不干扰。
权限入口也做了分离:条目脱敏要求类型管理员权限 + 条目阅读权限;流程内脱敏要求流程编辑权限,且操作者所属职能必须在参数 ProcessShuiYinRight 配置的白名单职能内。配置脱敏本身就是一种敏感操作,这个约束很必要。
规则模型三:黑白名单与冲突裁决
每个脱敏框可配置:
黑名单:名单内的用户/组织看到遮蔽状态;未在名单内的默认可见。
白名单:定向放行,且优先级高于黑名单。
官方文档给的冲突用例:用户在黑名单、用户所属组织在白名单 → 该用户可见。也就是"更细粒度的放行声明压过粗粒度的遮蔽声明",裁决顺序确定,不留解释空间。另外系统约束同一用户/组织不可同时出现在黑白两个名单里,从录入端消灭一部分冲突。
搜索范围也按作用域收窄:非流程条目可搜全系统组织架构;流程内文件只能搜当前流程涉及的人员。数据可见范围跟着操作上下文走,这个细节做得很讲究。
规则模型四:时间维度
脱敏规则自带生效日期:默认一年,起止时间可改;借用流程中的脱敏规则默认继承流程的"借用时间"作为生效周期。
翻译一下:授权是带TTL的。借用到期,脱敏放行自动失效,不需要人工回收。权限系统里最经典的事故是"僵尸授权"——人走了权限还在。把过期时间做成规则的一等公民,比任何"记得定期清理"的口头约定都可靠。
边界与纵深
最后说清楚这套机制的边界:脱敏是渲染层的访问控制,防的是"越权查看",防不了"授权用户拍屏幕"。所以实际部署里它从来不是单打独斗——同一套系统里还有防扩散水印(查看/下载/打印全程嵌入经手人标识,外流可溯源)、审计追踪(全量操作留痕)、三员分立(系统管理员/安全保密管理员/安全审计员三权相互制约)。
访问控制 + 威慑溯源 + 审计留痕,三层叠起来才是完整方案。单层银弹不存在,做安全的都懂。
以上就是今天搬的砖。做OA、做文档管理、做内容平台的同行,欢迎评论区交流权限模型设计。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/huibotong2022/article/details/167690210




