惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
T
Tailwind CSS Blog
V
Visual Studio Blog
月光博客
月光博客
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
阮一峰的网络日志
阮一峰的网络日志
量子位
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
Jina AI
Jina AI
雷峰网
雷峰网
博客园 - 【当耐特】
博客园 - 叶小钗
美团技术团队
宝玉的分享
宝玉的分享
IT之家
IT之家

博客园 - 程序员李铁牛

赛事报名系统开发总管理中心规划 赛事报名系统开发:角色与权限体系设计 赛事系统报名接龙高并发技术细节处理浅析 档案数字化研发手记:PDF合并内存溢出踩坑 纸质档案数字化管理系统研发手记:法院诉讼档案单套制落地案例复盘——从纸质卷宗到电子卷宗 档案数字化管理系统开发手记:人事档案专项审核与数字化的系统支撑——"凡提必审"下的技术要点 档案数字化研发手记:我们的技术栈选择——档案系统前后端选型理由(含一次"炫技"的教训) 社群团购系统开发分享——工程化(下):资金支付测试策略——资金模块 100% 覆盖,其他 60% 就够 社群团购系统类快团团源码开发——工程化(上):一套让 5 人小团队不出事故的开发规范 社群团购类快团团系统开发——RBAC 权限设计源码分析:当一个微信号有 4 种身份时怎么办 社群团购系统类快团团模式开发——微信小程序登录:code2Session 之后还有 5 件事要做 数字档案管理系统化研发手记:医院病历档案数字化——合规、病案首页 OCR 与调阅提速 数字档案系统研发手记:批量扫描任务调度——TWAIN/SANE 采集驱动的封装实践 档案数字化系统研发源码手记:置信度过滤——把 97% 识别率变成真正可交付的成果 档案数字化开发实例手记:盖章遮挡文字识别恢复 景区运营预约系统开发:景区会员体系怎么搭?3级会员模型+积分玩法 景区门票预约系统全渠道平台库存数据同步技术处理方式 系统宕机了怎么办?景区票务系统应急预案模板 景区门票预约系统开发:接入AI预测客流设计思路分析 景区预约系统开发总结:门票分时预约设计原理和落地方法 设备运维管理系统开发实战:用规则引擎实现可配置的设备告警策略自研轻量引擎 vs Drools 落地对比 设备维修保养系统预测性维护不用深度学习?设备健康度评分的务实实现方案 档案管理信息化系统研发手记:数字水印方案对比——可见水印 vs 盲水印(档案借阅防泄露) 景区票务系统开发实例分析:上云还是本地部署?6个维度判断 档案数字化系统源码研发手记:老旧档案去污点——中值滤波与 inpainting 效果对比 一物一码防伪溯源系统开发全栈源码串联一次扫码的完整链路追踪代码走读 景区门票预约系统票务系统的6个核心模块 景区上线门票预约系统的5个常见翻车点 景区门票预约系统之人脸识别 vs 身份证核验 vs 扫码入园,哪种最适合你? 景区门票预约系统开发深度解析之定价策略功能设计
档案数字化管理系统研发手记:档案权限模型——全宗-门类-案卷-...
程序员李铁牛 · 2026-08-31 · via 博客园 - 程序员李铁牛

一、档案权限的特殊性:不是"用户-角色"就完了

一般业务系统的权限是"用户 → 角色 → 功能菜单"(RBAC)。档案系统在此基础上还有一层数据级权限——档案的可见范围是树状的:

全宗(一个单位/机构的所有档案)
 └─ 门类(文书、科技、会计、人事、照片…)
     └─ 案卷(一卷档案)
         └─ 文件(卷内具体文件)

01-全流程地图-系统界面

一个用户可能:能看 A 全宗文书档案的案卷级,但不能看 B 全宗;能看人事档案的文件级(因为他是人事科的),但看不到会计档案。权限要能作用到树的每一层,且层级间要能继承和覆盖。

二、四级权限模型的设计

核心设计:权限作用域 + 层级继承

权限 = 用户 × 操作(查看/下载/打印/编辑/删除) × 作用域(全宗/门类/案卷/文件)

四个层级:

层级 权限粒度 典型授予对象 说明
全宗级 能看该全宗全部档案 档案馆管理员 最高数据级授权
门类级 能看该门类全部档案 各科室(人事科看人事类) 最常见的授权粒度
案卷级 能看指定案卷 项目组、借阅人 借阅授权通常到案卷
文件级 能看指定文件 单个申请 最细粒度,如某份合同

继承规则(关键)

  • 默认向下继承:全宗级授权 → 自动覆盖其下所有门类/案卷/文件;
  • 允许向上覆盖:门类级的"禁止"可以覆盖全宗级的"允许"(比如某人能看全宗,但某门类是绝密,单独设为禁止);
  • 显式 > 继承:文件级单独授权优先于继承来的案卷级权限。
def can_access(user, archive_node, action):
    """判断用户对某个档案节点的访问权限"""
    # 逐级向上找权限:文件 → 案卷 → 门类 → 全宗
    node = archive_node
    while node is not None:
        perm = get_perm(user, node, action)
        if perm == "deny":
            return False          # 显式禁止,立即拒绝
        if perm == "allow":
            return True           # 显式允许
        node = node.parent        # 未设置,向上继承
    return False                  # 全链路未授权,默认拒绝

默认拒绝(deny by default)是档案权限的铁律——没有授权就是不能访问,绝不默认放行。

三、权限的落地实现

实现方式对比

方式 优点 缺点 适用
数据库逐条存储权限 直观、可审计 权限记录量大(几千万档案逐条授权不现实) 小体量、借阅授权
角色 + 规则表达式 灵活、存储小 规则复杂难排查 中体量
树节点授权 + 继承 兼顾粒度与存储量 实现稍复杂 生产推荐

我们的实现:树节点授权

  • 档案树(全宗/门类/案卷/文件)上,授权只挂在"授权点"节点(通常是门类和案卷),文件级授权按需挂;
  • 权限查询走缓存(节点权限树缓存 + 变更失效),避免每次访问都遍历数据库;
  • 审计记录:每一次"权限授予/撤销"都记日志(谁、对谁、授了什么、谁批准的)。

权限与检索的联动

第 19 篇提到"权限过滤进索引"——检索时也要做权限收敛:

用户检索 → 查出候选文档 → 按权限过滤(ES filter + 应用层校验)

双保险:ES 里用 permission_tag 粗筛(快),应用层再按树权限精校验(准)——防止绕过检索接口直接拼文档 ID 读取。

四、涉密档案的强化控制

涉密档案(涉密单位的绝密/机密/秘密档案)权限要特殊处理:

  1. 物理隔离:涉密档案系统和普通系统分离部署(物理隔离或网闸),涉密数据不进公网;
  2. 三员分立:系统管理员(管系统)、安全保密管理员(管权限)、安全审计员(管审计)三个角色相互独立、相互制约——一人不能同时兼任两个角色,这是保密要求(依据涉密信息系统分级保护要求);
  3. 双人授权:访问涉密档案需要两个授权人审批;
  4. 终端管控:涉密档案下载/打印走审批,带水印、绑定终端。

五、踩坑记录

坑 1:权限判断放在前端。 早期版本前端根据角色隐藏按钮,后端不校验——结果有人直接调 API 绕过。教训:所有权限判断必须在后端,前端只是体验优化,不是安全边界。

坑 2:借阅到期权限不回收。 借阅授权到期后没自动回收,读者一直能看。解法:授权带有效期 + 定时任务到期回收 + 到期提醒(到期前 3 天提醒续借或归档)。

坑 3:权限变更不通知。 有人被撤权后,会话里还残留旧权限缓存。解法:权限变更 → 缓存失效 → 强制重新加载;敏感权限变更(撤权)立即踢下线重登。

坑 4:导出环节权限绕过。 用户能看某些档案,但系统"批量导出"功能把整卷导出(包含他没权限的文件)。解法:导出前按单文件权限过滤,无权限的文件跳过并在导出清单里标注。

六、权限模型给客户的价值

权限模型是档案系统"专业性"的直接体现,也是项目验收重点:

  • 客户问"你们系统怎么保证档案安全"——四级权限模型 + 默认拒绝 + 审计留痕,就是答案;
  • 涉密客户问"能不能过保密要求"——三员分立 + 物理隔离 + 双人授权,是硬指标;
  • 档案馆长问"谁看过这份档案"——审计日志一查便知。

七、小结

  • 档案权限 = RBAC(功能权限)+ 四级数据级权限(全宗/门类/案卷/文件);
  • 授权挂树节点 + 层级继承 + 默认拒绝,是生产可行的模型;
  • 检索、导出、借阅等所有出口都要做权限校验(后端强制);
  • 涉密场景:物理隔离 + 三员分立 + 双人授权;
  • 权限变更要失效缓存、审计留痕。