问题域/PD-526

动态作用域模型

Dynamic Scope Model

运行时动态生成带用户作用域的数据模型,实现多租户数据隔离

子问题

1.用户字段与核心模型动态合并

2.多租户记忆隔离

3.按 user/agent/session 维度过滤

4.字段冲突检测

5.ORM 层 scope 字段自动建索引与复合唯一约束

6.三后端 merge 变体的一致性保证

7.scope 模型缓存避免重复创建

各项目的解法1 solutions

Signals

横向对比

维度memU
作用域声明Pydantic BaseModel 子类声明,UserConfig.model 传入
合并机制type() 多重继承 + model_fields 冲突检测
后端适配三后端各自实现 merge 变体(InMemory/Postgres/SQLite)
索引策略自动创建 scope 索引 + unique_with_scope 复合唯一约束
过滤校验_normalize_where 白名单校验 + __in 操作符支持
类型安全泛型 TBaseRecord 保持返回类型与 core_model 一致

最佳实践

1.merge_scope_model 检测字段冲突防止覆盖核心字段

2.用户模型通过 Pydantic BaseModel 定义保证类型安全

3.where 过滤器统一应用于所有 Repository 查询

4.Postgres schema 用 _MODEL_CACHE 缓存已构建的 scoped SQLModel 避免重复创建

5.build_table_model 两步创建(Base+Table)保持 SQLModel table 行为正确

6.unique_with_scope 实现租户内唯一约束而非全局唯一