feat: 实现协议全文与同意记录功能

新增协议全文后台管理、版本化发布及本人同意记录功能,支持可撤销授权;完善资料与授权相关边界提示,调整评估提交时的资料与授权校验逻辑,同步更新相关页面文案与路由。
This commit is contained in:
hujun
2026-10-14 14:53:13 +08:00
parent b418969e92
commit c95482a0f3
58 changed files with 3269 additions and 146 deletions
@@ -0,0 +1,57 @@
# 协议全文与同意记录开发
2026-10-12,用户已授权实现协议全文、后台正文和版本管理、本人同意记录及可选撤销。正式正文尚未提供,本轮不编造或发布正式协议。代码尚未部署;短信仍默认关闭。融资评估28项填写内容、私有资料上传、外部查询及同事维护的产品机构库不在本轮范围,产品AI条件分析回撤保持。
## 实现
| 协议code | 用途scope | 可撤销 |
| --- | --- | --- |
| terms | account-terms | 否,保留账户使用确认 |
| privacy | account-privacy | 否,保留隐私政策确认 |
| document-use | documents | 是 |
| data-authorization | data | 是 |
后台新增独立“协议正文与审核发布”入口。草稿仍保存在fa_acticle,正文为纯文本,换行统一LF;正式发布须明确勾选已审核。fa_agreement_revision保存标题、精确正文、SHA-256、scope和UTC时间,(code,version)唯一;已发布版本修订必须使用新版本号。旧HTML协议不会自动成为正式版本,旧Acticle入口不能修改或删除结构化协议。
未来生效版本可审核发布,但尚未生效时不进入当前版。最新有效版被下架或删除来源后不回退旧版;指定历史版本仍返回冻结原文。提前发布未来版本应新建来源,保留仍有效的旧来源。公开读取在InnoDB REPEATABLE READ下用同一读事务;同意与发布采用一致的版本/来源锁顺序。
fa_user_consent保存grant记录及撤销命令,同意和撤销共享(user_id,request_id)唯一空间。每个受理撤销键追加revoke命令并指向原grant,历史列表只展示grant;重复撤销保持首次时间。新同意必须匹配当前版,旧键同内容可以补确认,不受后续版本更新、下架或撤销影响;异内容或异操作返回409。本人会话在事务和账户行锁内再次核对,跨账户不可查看或撤销。
小程序新增主包协议全文页及账户分包“隐私与授权”记录页,共29页面,63业务任务编号保持。支持加载失败重试、历史版本、可选授权确认及撤销。登录勾选绑定所见terms/privacy版本和摘要,认证后保存两项确认,确认成功才跳转;记录未知时使用原键手动补确认,无需再次验证密码或发送短信。只有明确404/AGREEMENT_NOT_AVAILABLE才允许现有账户密码登录且不生成同意证据;网络或503失败不能当未发布。后端登录契约保持,本轮不启强制同意策略。
待确认键仅在同会话页面内保存;离页返回保留,页面卸载、完整刷新或进程重启不提供持久恢复,不缓存协议正文或新增Token副本。本地同意不等同已上传资料、征信查询或第三方授权。资料步骤原有选填方式和融资输入保持。
## 接口与安装文件
API前缀为/api/v1,JSON请求,记录接口须已有Bearer会话;ID为十进制字符串,时间为UTC ISO秒格式。
| 方法/路径 | 请求 | 行为 |
| --- | --- | --- |
| GET /agreements/:code | 可选version | 当前或指定历史全文,公开可读 |
| GET /consents | 可选scope、page、pageSize | 仅本人grant,page≤1000,pageSize≤50 |
| POST /consents | scope、agreementCode、agreementVersion、requestId | 所见版本确认;requestId为16–64位ASCII字母数字、下划线或横线 |
| POST /consents/:id/revoke | requestId | 仅本人documents/data;共享幂等空间,首次撤销时间不变 |
后端在D:/AAdesk/202609/airz。database/agreement-revision-schema.sql和user-consent-schema.sql仅新增两表,database/schema.sql同步期望结构;本轮只在所属全新隔离库安装,生产未执行。离线权限定义新增五节点及独立运营v2;旧运营v1、客服v2、技术v5和已有账号绑定保持,未迁移正式权限。正式安装与角色分配须使用目标环境的新预检及明确发布授权。
后续发布应先配套部署后端协议接口与两表,再发行依赖这些接口的小程序;缺失接口的普通404不等于明确AGREEMENT_NOT_AVAILABLE,不会触发“未发布”密码登录兼容。运营v2是新模板,已有运营账号不会自动获得权限。发布或回退计划须核对当时真实状态和新增同意数据,不使用整库覆盖。
## 验证与边界
后端最终六套隔离入口:协议351项/86HTTP、后台500/94、会话284/70、资料268/76、短信账户271/54、内容服务56/0,共1730项/380次本机HTTP。协议纯校验40项与离线权限106项另列;失败、中途重复及前轮短信71项不累计。
覆盖精确历史正文、审核/不可变版本、未来/下架、后台角色与撤权、CSRF及旧入口绕过、分页/跨账户、原键补确认、两worker重复请求只一次、SQL故障回滚和会话失效。公开读取与同源发布交错的误404已先复现红测试,再修为同一读快照;验证当次旧版、下一次新版及旧历史保持。后台首轮夹具未关闭合成登录图片验证码,修正仅测试wrapper配置后通过;纯协议首轮输出为JSON被runner误判,精确匹配输出格式后通过,保留原回执。
前端最终结果与复审收口见本轮私密verification.json。受控H5使用导航前全网络拦截,响应只在进程内合成,Browser插件未提供,使用既有Playwright;手机390×844与桌面1280×900。故意注入的404/503/丢回执console与真实运行错误分开记录,合成HTML文字仅测试前端按文本显示,并不代表后台接受HTML正文。
独立审查发现并已通过红绿测试修正:撤销成功后废弃在途列表,防止刷新/筛选/分页的旧GET恢复未撤销状态;同意丢回执后在记录页被撤销,返回全文页的原键可确认“此前已撤销”,清除待确认命令,只有再次明确点击才用新键同意。正常同意成功后去记录页撤销再返回,也恢复显式同意按钮,不自动发送新同意;未知结果仍保留原键。返回记录页时保留离场渲染树,仅使请求代次失效及停止计时,避免退栈过渡时清空记录导致VDOM挂载错误;返回/账户变化仍清理并重新读取,迟到响应不能回填。最终独立只读复审未发现剩余明确P1/P2。
初轮H5完整78项/37合成请求/8POST覆盖全文、历史、记录、登录补确认、404与503区分和账户隔离;该轮是复审修正前源码,不作为最终源码全量验证。最终复审后H5专项48项/25合成请求/9POST覆盖刷新/筛选/分页旧响应、真实返回、已撤销原键收口、正常成功后撤销再返回及显式新同意,0运行错误、1条故意丢回执console、0未知外呼。中间41项及编译回执单独保留,不计入最终数。30项纯源码检查通过,分包及编译分别记录,不跨轮累计。
最终修正后的29页Android class编译于2026-10-12 12:21:51成功,微信小程序编译于12:22:35成功(Asia/Shanghai),日志为android-final-return.log/mp-final-return.log。30项协议源码检查与31项微信产物分包检查均通过,主控已独立复核。最终源码绑定source-manifest.final-return.json、48项页面回执review-final-verification.json与收尾回执final-return-receipt.json,旧12:16编译回执不替代本轮结果。所属H5预览已停止、5176释放,临时浏览器退出,原5174保留;这里只验证开发编译及受控页面,不等同真机或正式发行验收。
后端证据:D:/AAdesk/202609/airz-backups/agreement-consents/1791775959310。前端证据:C:/Users/JUN/AppData/Local/Temp/airz-agreements-ui-20261012及后续专项回执。源码摘要限定本轮相关文件,不是整仓候选或发行包。归档包含私密配置与诊断,不整包分享。
后端清理前28合成表零行、原26表结构及8触发器保持、Redis DB15零键;本轮精确库删除,所属两个服务退出,52786/52787释放,原Python字节码及27份工作树备份保持。692份退出屏蔽回执真实模型/Provider/生产.env加载为0。清理最后归属检查曾失败,但未改脚本的后续只读复核通过,确认精确库目录不存在、所属进程退出与私密ACL正确;原详细stderr未保存,不能确定具体失败点。原检查存在关闭监听后立即核PID的时间窗口,私密检查器仅补同归属进程的15秒退出等待,并保存修改前脚本与摘要。未重跑DROP/服务关闭或启动新服务,cleanup回执已补齐。
FILE-003内部协议与本地记录功能已实现,正式全文、资料用途/保存期限/撤销后资料处理、外部授权凭据、目标端真机及正式运营验收仍待。FILE-001/002/004与真实渠道依各自条件推进;不预填63正式用例通过,不恢复产品AI或自动推进上传/外部查询。