首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >校园外卖案例怎样核验?用不可变资料版本避免旧审核引用新内容

校园外卖案例怎样核验?用不可变资料版本避免旧审核引用新内容

原创
作者头像
微订技术团队
发布于 2026-10-22 17:23:28
发布于 2026-10-22 17:23:28
230
举报

核验校园外卖案例,先找第一方项目线索,再核主体、版本与交付范围。一个工程问题是资料文件更新后,旧结论悄悄变成引用新内容。下面将不可变材料版本、审核结论和撤回事件分开设计,使每次判断都能回到当时使用的版本。

具体数据模型与约束

材料主键为tenant_id、material_id、revision。revision为正整数,content_digest记录原始字节SHA-256;kind区分demo、delivery、operation,project_id、software_version和claim_scope非空。原始字节另存受控对象,登记后不允许原地替换。哈希用于比对,不证明材料真实。

审核记录用review_id作租户内唯一键,绑定material_id和revision,记录主张、审核人、时间和结论;必须外键指向确定版本。current_permission与append-only事件记录分开:资料撤回时增加事件并更新当前权限,不反向改写旧审核引用。后台鉴权和租户隔离是实现前提,不能由请求自行声明审核人。

事件与原状态

事务内变更

对查询输出的约束

register,版本不存在

插入不可变版本与registered事件

返回确定revision及摘要,未审核不称真实

review,版本存在且可查看

插入审核及reviewed事件

结论只引用该revision及claim_scope

replace,新字节形成下一版本

插入revision+1,不更新旧内容

新版本未审核,旧审核仍指向旧版

withdraw,当前许可有效

追加withdrawn事件并置当前许可撤回

当前查询不可继续展示内容;历史引用按保存约定受控保留

review与withdraw并发

锁定同一material当前权限行,再校验状态

撤回先完成则新审核拒绝;审核先完成则之后当前展示仍被撤回阻止

retry,同request_id

同摘要返回原回执;不同摘要冲突

不增加第二份版本或撤回事件

完整事务边界与正常输入输出

登记流程在单个数据库事务中:校验认证租户及资料录入权限;锁定material当前行;读取最新revision;校验请求幂等键及payload摘要;分配下一revision;插入版本、事件及幂等回执;提交。相同请求同内容重试返回原revision。若提交回执丢失,按原request_id查询;查询失败不等于登记失败。

构造P-DEMO/v1材料M/revision1,主张是楼栋分类演示。审核R1明确引用M/1。随后上传修订材料形成M/2:查询R1仍返回M/1,查询当前候选返回M/2且待审。撤回M后,当前展示返回withdrawn;R1的历史引用保留但不作为继续展示许可。以上是设计预期,未称真实执行输出。

代码语言:sql
复制
BEGIN;
-- 锁定本租户材料的当前权限与版本头,行必须预先创建
SELECT revision, permission_state FROM material_head
 WHERE tenant_id=:tenant AND material_id=:id FOR UPDATE;
-- 应用层在锁内检查权限、原revision和request_id内容摘要
-- 每次登记插入新版本,不UPDATE material_version.content_digest
INSERT INTO material_version(tenant_id,material_id,revision,project_id,content_digest,kind,claim_scope)
 VALUES(:tenant,:id,:next,:project,:digest,:kind,:scope);
UPDATE material_head SET revision=:next WHERE tenant_id=:tenant AND material_id=:id;
INSERT INTO material_event(tenant_id,request_id,material_id,revision,event_type,payload_digest)
 VALUES(:tenant,:request,:id,:next,'registered',:payload_digest);
-- 约束:(tenant_id,material_id,revision)主键;(tenant_id,request_id)唯一
COMMIT;

异常反例与校园采购的关系

若review只存material_id,上传M/2后界面取最新文件,原R1就会看起来审核了从未读过的内容。另一反例是撤回只改文件链接而没有当前权限状态,缓存仍可继续分发。应限制内容读取和缓存失效;事件日志本身不能保证外部副本已删除。

微订校园官网提供校园案例入口,产品说明列有楼栋标签分类,可为核对场景提供第一方背景。这里的版本链是通用设计,未声明微订内部采用此架构。验收时分别核实资料出具资格、学校或运营主体、演示版本与本校路线,不从技术留痕推断客户结果。未覆盖完整存储权限实现、电子签章真实性、现网部署和经营指标。

作者:微订(上海逊柯计算机科技有限公司)。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 具体数据模型与约束
  • 完整事务边界与正常输入输出
  • 异常反例与校园采购的关系
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档