同意管理
1)责任条款及界限
同意(接受):自愿、知情、具体和明确的意愿;可以召回。
法律依据:同意只是一种选择(合同、合法依据、合法利益等)。模型必须同时存储基础和目标。
处理目标(purpose):原子原因:分析、个性化、ads、email_marketing、data_sharing_vendor_X。
粒度:同意按目标、渠道、供应商、地区、数据类别进行存储。
受试者的个人资料:人,设备,家庭,孩子的帐户(未成年人的特殊规则)。
2)同意生命周期
1.收集:横幅/SMR、配置文件设置、API/SDK、离线通道(联系中心)。
2.验证:年龄,地区,替代品的可用性(没有"黑暗模式")。
3.注册:为目的创建同意事件和当前状态快照。
4.分发:发布到事件总线,将缓存升级到边缘,与供应商同步。
5.执行:在实时(网关/像素/SDK),batch(ETL/analytics)和ML pipline中应用。
6.更改/撤回:立即禁止新的收集/激活,随后对历史政策数据进行"清理"。
7.审计/报告:处理时同意的可证明性(谁、何时、文本版本)。
3)建筑组件
CMP(同意管理平台):UI/SDK+API,在UX/辖区下格式化同意选项;文本和版本中的真相来源。
Consent Registry(注册表):一个可靠的状态和同意事件存储库(仅限日志+当前投影)。
Consent PDP/PEP: Policy Decision/Enforcement Point.PDP决定"可以吗?",PEP将解决方案应用于API网关,ETL,SDK等。
同意的边缘缓存:周边检查的潜在性低。
合作伙伴/GPP/IAB网关:将本地目标转换为合作伙伴信号并返回。
Data Lineage&Tagging:在整个链条上用同意/基础标志标记数据。
4)数据模型(电路)
用户同意快照(简化):json
{
"subject_id": "usr_123",
"subject_scope": "user",
"region": "EU",
"legal_basis": {
"analytics": "consent",
"personalization": "consent",
"security": "legitimate_interest",
"contract_core": "contract"
},
"purposes": {
"analytics": {"status": "granted", "version": "v5", "updated_at": "2025-10-31T13:20:10Z"},
"personalization": {"status": "denied", "version": "v5", "updated_at": "2025-10-31T13:21:31Z"},
"ads": {"status": "denied", "version": "v5", "updated_at": "2025-10-31T13:21:31Z"},
"email_marketing": {"status": "granted", "channel":"email","updated_at":"2025-10-31T13:22:05Z"}
},
"text_bundle": {"locale":"uk-UA","policy_version":"2025-09"},
"evidence": {"capture_ip":"203. 0. 113. 5","capture_ua":"Chrome/142"}
}
同意事件(仅append-only):
json
{
"event_id": "cse_987",
"subject_id": "usr_123",
"purpose": "personalization",
"previous": "denied",
"current": "granted",
"legal_basis": "consent",
"policy_version": "2025-09",
"captured_at": "2025-10-31T13:21:31Z",
"channel": "web",
"evidence": {
"banner_id": "cmp_v3",
"text_hash": "sha256:...",
"ip": "203. 0. 113. 5",
"ua": "Chrome/142",
"locale": "uk-UA"
}
}
5)信号协议和传播
Web/App/SDK:存储同意标记(cookie/local storage/secure store)+签名/完整性检查;登录时的自动重新定位。
服务器侧:"X-Consent-Token"/"X-Purposes"头,SSR/边缘渲染双向交换。
合作伙伴/供应商:转换为其格式(例如,目标矢量,通用信号"GPP/TCF");故障时为零信号/限制模式。
离线通道:操作员记录音频同意/checkbox,然后进行验证并绑定到"主语_id"。
6)执行: 交通在何处和如何"切断"
在API网关(PEP)上:- 未经同意(/profile/enrich,/ads/,/events/track)锁定端口/字段。
- 突变响应/查询:切断跟踪器、个性化字段、标识符。
- 将同意上下文分配给后端查询(JWT标题或单个标题)。
- 事件变形金刚通过同意标志删除/掩盖字段。
- Dataset标记:'dataset。consent_scope=analytics:granted;ads:denied`.
- 在ML管道中,没有适当的同意就排除了记录;禁用用于禁止目的的培训/激活。
7)伪代码: 网关上的解决方案
python def enforce_consent(request, consent_snapshot):
purpose = map_endpoint_to_purpose(request. path) # /ads/ -> "ads"
basis = consent_snapshot. legal_basis. get(purpose)
status = consent_snapshot. purposes. get(purpose, {}). get("status", "denied")
if basis! = "consent": # e.g. security/contract - allowed without return ALLOW banner
if status!= "granted":
return DENY # or ALLOW with redaction if degradation is allowed
return ALLOW
8)验证和可证明性
同意文本版本:存储"policy_version"、"text_hash"、"banner_id"。
本地和区域:显示的确切文本和语言。
处理时的快照: 回答的机会"为什么广告在09:03播出2025-10-15?».
不变日志:WORM/append-only with密码事件子项。
9)特殊桉例
未成年人:年龄验证,父母同意,单独目标和时间表。
来宾→登录:匿名标记与帐户的合并;冲突中的规则(最严格的胜利)。
多重结构:一致性再平衡;当召回时-在所有设备上推入致残令牌。
区域模式:"严格"(EU)vs "opt-out"(某些市场)-切换CMP预设。
A/B测试:数据实验-实验的独立目标;没有它-只有功能测试没有个人数据。
删除权:召回可以触发按目的删除/匿名历史数据("purge on revoke"策略)。
10)反模式
一个"共享"的支票盒。
缺乏文本版本和显示的可证明性。
仅存储没有服务器注册表的Cookie标志。
仅在UI中但在ETL/ML/出口中不适用同意。
冲突真相来源(SDK ≠后端)。
黑暗模式,强加同意:法律和声誉风险。
11)可观察性和指标
覆盖:具有有效同意标记的流量份额。
Latency PDP:周边决策时间。
漂移:SDK和服务器快照之间的不匹配。
Revoke SLA:召回时间→完全停用/清理的时间。
Vendor Compliance:使用正确信号的合作伙伴呼叫百分比。
事件:未经同意的处理尝试,阻止呼叫。
Dashbords:"同意漏斗",区域/通道地图,热故障图。
12)测试和验证
PDP/PEP合同测试:目标/区域组合的真实性表。
混乱/漂移测试:非同步SDK状态↔服务器;TTL缓存到期。
CMP发行版:A/B验证文本和UX中性(无深色模式)。
E2E跟踪:用户反向事件→没有发送到伙伴像素和管道。
13)相互关联的能力
匿名/别名化:在非个人化之前和之后执行故障。
加密和KMS:标记/日志保护。
Geo路由:选择区域文本/规则。
可观察性:没有PDn的私人行星;仅与令牌相关。
Data Lineage:在每个dataset中都是同意的印记。
14)迷你食谱
声明性目标策略(YAML示例):yaml purposes:
analytics:
legal_basis: consent enforcement: redact_fields: [ad_id, gaid, idfa]
personalization:
legal_basis: consent enforcement: deny_endpoints: [/recs/, /profile/enrich]
security:
legal_basis: legitimate_interest enforcement: allow email_marketing:
legal_basis: consent channel: email
总线中的事件标记:
event. meta. consent. analytics = granted denied event. meta. consent. ads = denied event. meta. legal_basis = consent contract li
清除召回数据:
on user_revoke(purpose):
mark subject_id + purpose as "purge_pending"
schedule purge jobs over datasets with lineage(purpose)
emit audit_event("purge_started", scope=purpose)
15)建筑师支票清单
1.是否有一个单一的注册表和不变的同意日志?
2.到处都有原子靶和旋转靶吗?
3.执行是在外围,在线程,在分析和ML?
4.是否实施了历史数据的召回和清除政策?
5.UI/SDK/服务器快照和松弛机制是否一致?
6.是否配置了Coverage/Drift/Revoke SLA和报告指标?
7.有关于事件(违规行为,投诉,监管机构)的运行簿吗?
8.支持特殊制度(儿童、地区、B2B合作伙伴)?
二.结论
同意管理不是模态窗口,而是端到端架构功能:从目标声明和文本验证到实时机器执行和后续报告。严格的数据模型、统一注册表、PDP/PEP、完整的遥测和清洁程序将合规性转化为竞争优势--一个值得信赖的平台。