应用数据架构设计
应用数据的整体结构、数据归属、访问权限、安全边界与运行流程。
应用数据为 Poco 生成的页面提供持续保存和管理记录的能力,使报名表、任务看板、个人记录等应用可以在多次访问中继续使用,也可以由对话或定时任务更新数据。
本文介绍这项能力的整体设计。常见使用场景和可直接复制的提示词,见 应用数据最佳实践。
1. 设计目标与范围
应用数据围绕页面使用、对话处理和自动化更新建立统一的数据基础:
- 数据持续保存:页面关闭或重新生成后,仍可继续使用同一应用的数据。
- 多入口共用:本人预览、文件分享、对话分享和发布页可以访问同一份数据。
- 访问范围可控制:分别规定谁能查看内容、提交记录、修改记录,以及只查看数量。
- 页面与任务协作:页面负责交互和展示,对话与定时任务可以读取和更新共享数据。
- 作者可管理:提供规则查看、记录浏览、导出、删除和清空能力。
整体设计复用 Poco 现有的登录体系、数据库和附件存储。用户通过对话描述需求,平台负责建立应用、设置规则并执行数据访问校验。
这项能力服务于平台内的轻量应用。外部系统的数据接入、复杂的跨应用关联分析和数据实时推送不属于当前范围。
2. 总体架构
应用数据包含两条访问链路:一条用于页面交互,另一条用于对话和定时任务。两条链路最终都由应用数据服务执行归属、权限和容量校验。
| 组成部分 | 主要职责 |
|---|---|
| 应用页面 | 展示记录、收集输入、发起数据操作,并提示操作结果 |
| Poco 预览、分享与发布入口 | 承载应用页面,确认请求来源,携带当前访问入口和登录状态 |
| 任务执行服务 | 根据对话或定时任务的要求,创建应用、设置规则、读取和更新共享数据 |
| 任务管理服务 | 校验任务所属用户,将应用数据操作转交给数据服务 |
| 应用数据服务 | 统一处理应用归属、访问权限、容量限制、记录操作与附件管理 |
| 记录存储 | 保存应用名称、作者、访问规则及各类记录 |
| 附件存储 | 保存页面上传的图片和文件,由数据服务管理归属与访问 |
应用数据服务属于平台后端,是数据访问规则的统一执行位置。页面中的按钮或提示用于引导交互,实际是否允许操作由服务端判断。
3. 数据组织与归属
应用是数据的管理单位
每个应用归属于一位作者,并拥有独立的名称、应用标识、访问规则和数据。页面通过应用标识关联到对应的数据。
记录按用途分组,例如任务、报名、日报;每组称为一个“集合”。同一个集合中的记录遵循相同的共享访问规则。
数据归属于应用,而不是某次对话或某个页面版本:
- 预览、分享和发布使用同一应用时,共用同一份数据。
- 作者继续修改页面、在新对话中制作新的展示页面,或通过定时任务更新内容时,可以继续关联原应用。
- 来源对话用于追踪应用从哪里创建,帮助作者返回原对话修改页面;它不决定数据归属。
- 他人复制页面并继续创作后,原应用仍属于原作者。副本需要建立自己的应用,才能保存独立的数据。
共享数据与个人私有数据
| 数据类型 | 用途 | 访问范围 |
|---|---|---|
| 共享数据 | 报名、任务、报表等由应用统一管理的记录 | 按集合规则开放,作者可以管理全部共享记录 |
| 个人私有数据 | 每位使用者自己的收藏、记账或私人待办 | 必须登录,仅该使用者本人可以访问 |
“共享”表示由应用统一管理,并不代表公开。一个共享集合也可以设置为仅作者可见。
个人私有数据按登录用户独立保存。应用作者的数据面板、对话和定时任务均不能读取其他使用者的私有记录;对话的数据工具只处理共享数据。
图片与附件
图片和附件归属于应用中的共享集合,并沿用该集合的访问规则:上传需要提交权限,查看需要读取权限。作者可以删除全部附件,登录访客只能删除自己上传的附件。
附件内容与记录分别保存,记录中保留附件信息。删除单条记录不会自动删除相关附件;清空集合或删除应用时,会清理对应范围的附件。个人私有数据目前不支持附件。
4. 权限设计
共享数据的访问规则
每个共享集合分别设置查看和提交范围:
| 范围 | 查看记录 | 提交、修改和删除 |
|---|---|---|
| 仅作者 | 仅作者可查看 | 仅作者可新增、修改和删除 |
| 登录用户 | 登录 Poco 的访客可查看 | 登录访客可新增,只能修改或删除自己创建的记录 |
| 所有访客 | 包括未登录访客在内都可查看 | 所有访客可新增;登录访客只能修改或删除自己创建的记录,未登录访客不能修改或删除已有记录 |
作者始终可以管理自己应用中的全部共享数据。没有明确设置规则的集合,默认仅作者可查看和修改。
查看与提交范围可以分别设置。例如报名表可以允许所有人提交,但只有作者查看报名名单。“登录用户”表示符合登录条件的访客,不自动限制为某个团队或指定成员。
平台还支持单独设置“查看数量”的范围,用于报名人数公开、报名名单保密等需求。只有数量查看权限的访客只能获取总数,不能通过筛选人数推断受保护的内容。
创建管理权限与页面使用权限
“应用数据”功能权限控制作者能否通过对话或定时任务创建和管理应用,以及能否进入数据管理面板。管理员可以按角色调整这项权限。
页面访问按应用本身的规则执行。关闭作者的功能权限,不会自动停止已有分享或发布页面的数据访问。需要停止访客访问时,应调整应用的数据规则。
专业与办公模式提供相同的数据能力;专业模式另外提供集中管理应用的列表入口。外部嵌入对话不提供应用数据管理能力,避免外部访客借助对话操作应用所有者的数据。
5. 核心运行流程
创建带数据的页面
- 用户在对话中说明应用用途、需要保存的内容和访问范围。
- 任务执行服务在用户权限允许时创建应用,并配置访问规则。
- 生成的页面关联到该应用,通过平台提供的数据能力查询和保存记录。
- 作者在页面预览和“应用数据”面板中确认交互、访问范围及保存结果。
访客查看或提交数据
- 访客通过有效的分享或发布入口打开应用页面。
- Poco 承载页面的数据请求,携带该入口和当前登录状态。
- 数据服务根据入口确认作者,并校验应用归属。
- 数据服务按数据类型和集合规则检查本次操作;修改或删除已有记录时,还会检查记录创建者。
- 操作结果返回页面,由页面展示记录、成功提示或失败原因。
本人预览也使用同一条页面访问链路,但要求访问者是该对话的所有者。
对话与定时任务更新数据
- 任务执行服务根据用户要求找到或创建应用,准备共享数据操作。
- 任务管理服务校验任务所属用户,转交数据操作。
- 数据服务确认应用属于该用户,完成记录读取或更新。
- 页面在下一次查询时读取更新后的数据。
汇总计算由任务或页面完成。定时任务可以按日期更新报表,但重复执行是否覆盖同一天的结果,需要在任务要求中明确。
6. 安全边界
安全校验贯穿页面入口、应用归属和记录操作三个层面:
- 入口有效性:本人预览要求对话归属正确;分享入口要求链接有效;发布入口要求当前发布有效。入口另有登录要求时也必须满足。
- 应用归属:应用必须属于当前入口的作者,防止页面借用其他作者的应用标识操作数据。
- 请求来源:平台只接受当前承载页面发出的数据请求。页面跳转到外部网站后,不能继续借用原页面的数据访问能力。
- 凭据管理:登录和服务访问凭据由平台持有,应用页面通过平台完成数据操作。
- 任务身份:对话和定时任务只能操作所属用户的应用,且只能处理共享数据。
- 修改校验:服务端检查访问规则和记录创建者,同一记录的并发合并更新按顺序处理。
访问入口用于确认作者,并不限定只能访问当前页面关联的那一个应用。因此,撤回某个页面后,同一作者的其他有效分享或发布入口仍可能访问按规则开放的数据。停止开放应调整应用规则,不能只依赖页面撤回。
7. 数据管理与生命周期
作者可以从本人对话预览打开“应用数据”面板。专业模式还提供 工作 → 应用数据 列表,集中管理作者创建的应用,并返回来源对话继续修改页面。
管理能力覆盖共享数据:
- 查看各集合的访问规则、记录及数量。
- 导出某个集合的全部共享记录为可用 Excel 打开的 CSV 表格。
- 删除单条记录,或清空整个集合的记录与附件。
- 删除应用及其全部记录和附件。
CSV 导出包含所选集合的全部共享记录,不限制记录数量或集合数据总大小,最多支持 200 个业务字段。服务端分批读取记录并暂存到临时文件,再流式输出 CSV;导出完成后自动清理临时文件。
面板目前用于查看、导出和清理。访问规则通过对话调整,记录内容通过应用页面或对话修改。
管理员可以在管理后台 内容与运营 → 应用数据 查看所有用户的应用,按应用名称、应用 ID 或所有者搜索,并对任一应用使用上述查看、导出和清理能力,包括删除应用。管理员不修改访问规则,也看不到访客的私有数据。列表和操作遵循内容隐私设置:所有者开启内容隐私后,只有超级管理员可以查看和管理其应用数据。
预览与正式使用共用同一份数据,不区分试用数据和正式数据。页面改版时,只要继续关联原应用,就可以保留已有记录;删除应用后,关联页面将无法继续访问这些数据。
8. 当前能力边界
| 项目 | 当前限制 |
|---|---|
| 单条记录 | JSON 内容按 UTF-8 编码计算,默认不超过 1MB;通过 USER_APP_MAX_DOCUMENT_SIZE_MB 配置 |
| 共享记录 | 不设置记录数量上限,实际容量取决于数据库与服务器资源 |
| 个人私有记录 | 不设置记录数量上限,每位使用者的数据独立保存 |
| 图片与附件 | 单个文件不超过 10MB;每个应用最多 10,000 个文件,总容量默认 10GB,由管理员配置 |
| 附件类型 | 支持常见图片、PDF、办公文档、文本、CSV 和 ZIP 文件 |
| 查询能力 | 支持按记录字段筛选、比较、排序、分页和计数,单次最多查询 200 条;分组、求和等汇总由页面或任务计算 |
| 更新方式 | 页面主动查询数据,暂不提供数据变化的实时推送 |
| 跨应用使用 | 可以分别读取自己的应用进行分析,暂不支持跨应用关联查询 |
数据能力依赖 Poco 的页面承载入口。下载到本地的页面和产物的“在新窗口打开”无法使用这项能力。
应用数据适合轻量记录和协作,不建议保存密码、密钥、身份证号等敏感信息。外部系统需要通过已有的数据访问能力取得资料,再由任务写入应用。