Files
airz-uniapp/docs/superpowers/specs/2026-10-12-agreement-consents-design.md
hujun c95482a0f3 feat: 实现协议全文与同意记录功能
新增协议全文后台管理、版本化发布及本人同意记录功能,支持可撤销授权;完善资料与授权相关边界提示,调整评估提交时的资料与授权校验逻辑,同步更新相关页面文案与路由。
2026-10-14 14:53:13 +08:00

26 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 协议全文与同意记录设计
用户已同意先实施协议全文展示及版本化同意记录。本轮复用内容后台和既有登录/隐私/资料授权入口;不新增融资28项填写内容、不开发私有上传或外部查询,不涉及同事产品机构库,不恢复产品AI条件分析。两仓原有短信未提交改动保留,短信仍默认关闭;本轮不提交、推送、部署或接生产。
## 协议与不可变版本
四种code固定对应scope:terms/account-terms、privacy/account-privacy、document-use/documents、data-authorization/data。fa_acticle作为协议草稿源,只有本轮结构化kind=agreement正文经运营确认已审核并正式发布后才成为可用协议;旧type2/3内容不自动转为正式版本。正式正文未知,本轮不编造、不填正式内容、不发布。
发布同事务保存fa_agreement_revision,唯一(code,version),冻结标题、正文、scope、SHA-256和UTC生效/发布时间。正文为纯文本,最多60000字节,保留换行,不执行HTML。版本ASCII字母数字点横线下划线、1至64字符,标题最多50字。未来生效版本不作为current;同版本不能改正文,修订须新版本。下架不抹除已发布历史,指定版本始终返回原文;新增/编辑/批量/旧入口不得绕过审核与版本约束。沿用后台权限及内容CSRF,不自动绑定正式角色。
## 同意与撤销
新增fa_user_consent保留本人同意的协议code/version/快照ID与摘要、服务端grantedAt、requestId。grant行保存首次revokedAt,每个已受理撤销请求追加event_kind=revoke命令并指向原grant;同意与撤销共享(user_id,request_id)唯一空间,新键重复撤销也不可被后续操作复用。服务端在事务与账户行锁内重核有效会话;grant读取当前已发布版并锁定,与发布锁顺序兼容。新请求必须scope匹配且版本当前,旧键同内容返回已有记录、异内容409,不因后续新版本而破坏旧键补确认。
GET /agreements/:code公开,version可选;GET /consents仅本人、可scope过滤和有界分页;POST /consents要求scope/agreementCode/agreementVersion/requestId;POST /consents/:id/revoke仅本人、重复保留首次时间、同键异操作拒绝。协议使用确认account-terms/account-privacy不当成可撤销的数据查询授权;仅documents/data提供撤销,撤销不删除历史证据。所有本地同意记录均不代表第三方授权或已经查询外部数据。
## 前端与登录
主包新增可匿名协议全文页,账号分包新增本人同意记录页。现有链接跳转全文,具备加载/未发布/失败重试和旧响应守卫;记录页可查看当时版本、手动撤销可选授权。复用现有登录勾选,加载terms/privacy后绑定所见版本;认证成功后使用当前会话保存两项同意,确认成功才跳转。登录已验证但保存未知时手动原键重试,不重复发送短信/验证密码;切换账户和离页不能回填。
后端登录契约和旧客户端兼容,本轮不启用强制协议登录策略;协议未发布时不产生同意证据,原有账户密码登录可继续,真实网络失败不能当未发布。正式正文/留存期限仍需业务确认。融资资料步骤的原选填行为保持,附件和外部查询仍未开放。
## 验证与迁移边界
新两表SQL只在全新私密本机MySQL隔离库安装,生产/schema迁移仅提供文件,不直接执行;独立Redis DB15、ROOT、命名空间和模型屏蔽。TDD先缺功能红测试,再测试发布不可变、历史精确读取、并发/幂等、跨账户、撤销、版本竞争、CSRF及旧内容/短信账户回归。前端纯测试、本地微信/Android编译与合成API受控渲染;不得通过默认H5入口访问生产API。全部完成后精确清理所属环境,真实渠道和正式正文验收不预填通过。