feat: 添加 PocketBase 管理端与自定义 hooks 的 API 文档
- 新增 openapi.yaml 文件,定义管理端与自定义 hooks 的接口文档,包括系统、微信认证、平台认证、字典管理、附件管理、文档管理、购物车和订单等接口。 - 新增 order.yaml 文件,定义订单相关的接口,包括查询订单列表、查询订单详情、新增订单记录、修改订单记录和删除订单记录的请求和响应结构。 - 新增 openapi-wx/openapi.yaml 文件,定义 PocketBase 原生 API 文档,包含企业信息、附件信息、产品信息、文档信息、购物车和订单的接口。 - 新增 pocketbase.scheme.js 文件,包含 PocketBase 集合的创建和更新逻辑,定义了多个集合的字段、索引和权限规则。
This commit is contained in:
152
docs/pb_collection_permission_overview.md
Normal file
152
docs/pb_collection_permission_overview.md
Normal file
@@ -0,0 +1,152 @@
|
||||
# PocketBase Collection 权限总览
|
||||
|
||||
> 范围:当前仓库 `docs/pb_tbl_*.md` 已存在表结构文档 + 本次新增的 3 张方案相关草案表
|
||||
> 目标:把“每张表该如何做 PocketBase 原生权限控制”整理成一份便于确认、评审和后续写脚本的总览
|
||||
> 状态:`working draft`
|
||||
|
||||
## 阅读说明
|
||||
|
||||
- 本文档分为“现状规则”和“本次新增建议规则”两部分。
|
||||
- “现状规则”优先参考现有 `docs/pb_tbl_*.md` 与 `script/pocketbase*.js`。
|
||||
- “新增建议规则”对应你这次要加的 3 张表,当前仅为文档设计,尚未执行。
|
||||
- 本文所有 owner 行级规则都默认使用 `@request.auth.openid` 作为业务身份锚点。
|
||||
- 软删除约定统一为:`is_delete = 0` 才视为可见、可操作数据。
|
||||
|
||||
## 一、推荐统一规则模板
|
||||
|
||||
### 1. owner 私有数据表
|
||||
|
||||
适用场景:
|
||||
|
||||
- 购物车
|
||||
- 订单
|
||||
- 本次新增的方案 / 方案分享 / 方案模板
|
||||
|
||||
推荐模板:
|
||||
|
||||
| Rule | 推荐表达式 |
|
||||
| :--- | :--- |
|
||||
| `listRule` | `@request.auth.id != "" && <owner_field> = @request.auth.openid && is_delete = 0` |
|
||||
| `viewRule` | `@request.auth.id != "" && <owner_field> = @request.auth.openid && is_delete = 0` |
|
||||
| `createRule` | `@request.auth.id != "" && @request.body.<owner_field> = @request.auth.openid` |
|
||||
| `updateRule` | `@request.auth.id != "" && <owner_field> = @request.auth.openid && is_delete = 0` |
|
||||
| `deleteRule` | `@request.auth.id != "" && <owner_field> = @request.auth.openid && is_delete = 0` |
|
||||
|
||||
### 2. 公开可读、管理写
|
||||
|
||||
适用场景:
|
||||
|
||||
- 字典
|
||||
- 产品
|
||||
- 文档
|
||||
- 附件
|
||||
|
||||
典型模式:
|
||||
|
||||
| Rule | 推荐表达式 |
|
||||
| :--- | :--- |
|
||||
| `listRule` | `is_delete = 0` |
|
||||
| `viewRule` | `is_delete = 0` |
|
||||
| `createRule` | `@request.auth.users_idtype = "ManagePlatform" \|\| @request.auth.usergroups_id = "<管理角色ID>"` |
|
||||
| `updateRule` | `@request.auth.users_idtype = "ManagePlatform" \|\| @request.auth.usergroups_id = "<管理角色ID>"` |
|
||||
| `deleteRule` | `@request.auth.users_idtype = "ManagePlatform" \|\| @request.auth.usergroups_id = "<管理角色ID>"` |
|
||||
|
||||
### 3. 管理/权限元数据表
|
||||
|
||||
适用场景:
|
||||
|
||||
- 角色
|
||||
- 资源
|
||||
- 角色权限
|
||||
- 用户覆盖权限
|
||||
- 行级范围
|
||||
- 文档操作历史
|
||||
|
||||
典型模式:
|
||||
|
||||
- 默认不建议公开给普通用户直接访问。
|
||||
- 推荐仅管理端 / 管理角色通过 hooks 页面或内部脚本维护。
|
||||
|
||||
## 二、现有表规则总表
|
||||
|
||||
## 2.1 owner 私有数据
|
||||
|
||||
| 表名 | owner 字段 | list/view | create | update/delete | 说明 |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| `tbl_cart` | `cart_owner` | `@request.auth.id != "" && cart_owner = @request.auth.openid && is_delete = 0` | `@request.body.cart_owner != ""` | `@request.auth.id != "" && cart_owner = @request.auth.openid` | 已在 `script/pocketbase.cart-order.js` 明确;当前 create 已放宽为只要显式提交非空 owner 即可 |
|
||||
| `tbl_order` | `order_owner` | `@request.auth.id != "" && order_owner = @request.auth.openid && is_delete = 0` | `@request.auth.id != "" && @request.body.order_owner = @request.auth.openid` | `@request.auth.id != "" && order_owner = @request.auth.openid` | 已在 `script/pocketbase.cart-order.js` 明确 |
|
||||
|
||||
## 2.2 公开可读、管理写
|
||||
|
||||
| 表名 | list/view | create/update/delete | 说明 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `tbl_system_dict` | `is_delete = 0` | `ManagePlatform` 或管理角色 | `script/pocketbase.dictionary.js` 已明确 |
|
||||
| `tbl_product_list` | `is_delete = 0` | `ManagePlatform` 或管理角色 | `script/pocketbase.product-list.js` 已明确 |
|
||||
| `tbl_document` | `is_delete = 0` | 文档当前脚本未显式开放原生写;实际业务通过 hooks 管理端写入 | `script/pocketbase.documents.js` + 现有文档口径 |
|
||||
| `tbl_attachments` | `is_delete = 0` | 原生写默认不开放,实际通过 hooks / 管理端上传 | `script/pocketbase.documents.js` + 现有文档口径 |
|
||||
|
||||
## 2.3 管理端/权限模型表
|
||||
|
||||
| 表名 | 当前口径 | 说明 |
|
||||
| :--- | :--- | :--- |
|
||||
| `tbl_auth_resources` | 管理用途,不建议公开给普通用户直连 | 现有文档写为“仅管理员 / 管理角色允许” |
|
||||
| `tbl_auth_roles` | 管理用途,不建议公开给普通用户直连 | 同上 |
|
||||
| `tbl_auth_role_perms` | 管理用途,不建议公开给普通用户直连 | 同上 |
|
||||
| `tbl_auth_user_overrides` | 管理用途,不建议公开给普通用户直连 | 同上 |
|
||||
| `tbl_auth_row_scopes` | 管理用途,不建议公开给普通用户直连 | 同上 |
|
||||
| `tbl_document_operation_history` | 管理用途,不建议公开给普通用户直连 | 同上 |
|
||||
|
||||
## 2.4 特殊表
|
||||
|
||||
| 表名 | 当前口径 | 备注 |
|
||||
| :--- | :--- | :--- |
|
||||
| `tbl_auth_users` | 当前文档口径为“公开允许新增与修改;列表 / 详情 / 删除仅管理员 / 管理角色允许” | 这是 auth collection,既受 PB auth 机制影响,也受 hooks 认证流程影响 |
|
||||
| `tbl_company` | 当前文档口径为“公开可创建、公开可列出;详情 / 更新 / 删除仅管理员或管理后台用户允许” | 更偏业务接入表,不属于 owner 私有表 |
|
||||
|
||||
## 三、本次新增 3 表建议规则
|
||||
|
||||
| 表名 | owner 字段 | list/view | create | update/delete | 备注 |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| `tbl_scheme` | `scheme_owner` | `@request.auth.id != "" && scheme_owner = @request.auth.openid && is_delete = 0` | `@request.auth.id != "" && @request.body.scheme_owner = @request.auth.openid` | `@request.auth.id != "" && scheme_owner = @request.auth.openid && is_delete = 0` | 私有方案表 |
|
||||
| `tbl_scheme_share` | `scheme_share_owner` | `@request.auth.id != "" && scheme_share_owner = @request.auth.openid && is_delete = 0` | `@request.auth.id != "" && @request.body.scheme_share_owner = @request.auth.openid` | `@request.auth.id != "" && scheme_share_owner = @request.auth.openid && is_delete = 0` | 按你的要求,分享表也采用 owner 私有规则,因此接收方默认不能直连查看 |
|
||||
| `tbl_scheme_template` | `scheme_template_owner` | `@request.auth.id != "" && scheme_template_owner = @request.auth.openid && is_delete = 0` | `@request.auth.id != "" && @request.body.scheme_template_owner = @request.auth.openid` | `@request.auth.id != "" && scheme_template_owner = @request.auth.openid && is_delete = 0` | 私有模板表 |
|
||||
|
||||
## 四、这次设计里需要你重点确认的点
|
||||
|
||||
### 1. `tbl_scheme_share` 是否接受新增 `scheme_share_owner`
|
||||
|
||||
这是本次最关键的结构补充。
|
||||
|
||||
原因:
|
||||
|
||||
- 你要求 3 张表统一按 `xxx_owner = token 对应 openid` 做 PB 行级限制。
|
||||
- 原始草图里的分享表没有 owner 字段,无法直接套用这套规则。
|
||||
|
||||
如果你确认这条设计,后续脚本会把它作为正式字段创建。
|
||||
|
||||
### 2. `createRule` 是否必须校验 `@request.body.<owner_field> = @request.auth.openid`
|
||||
|
||||
当前文档建议“要校验”。
|
||||
|
||||
原因:
|
||||
|
||||
- 这样可以防止普通用户伪造别人的 owner 值直接创建越权数据。
|
||||
- 这也是现有 `tbl_cart` / `tbl_order` 的做法,风格一致。
|
||||
|
||||
### 3. 分享表是否允许“被分享人”直接走 PB 原生 API 查看
|
||||
|
||||
当前文档按你的要求,先设计成:
|
||||
|
||||
- 只有 `scheme_share_owner` 能删改查
|
||||
|
||||
这最严格,但也意味着:
|
||||
|
||||
- `scheme_share_to` 对应的用户不能直接通过 PB 原生 `list/view` 看到分享记录
|
||||
|
||||
如果你的实际业务是“被分享人需要能直接看到收到的分享”,那这张表的 `listRule` / `viewRule` 需要改成双边可见,而不是纯 owner 模式。
|
||||
|
||||
## 五、对应文档索引
|
||||
|
||||
- [pb_tbl_scheme.md](/E:/Project_Class/BAI/Web_BAI_Manage_ApiServer/docs/pb_tbl_scheme.md)
|
||||
- [pb_tbl_scheme_share.md](/E:/Project_Class/BAI/Web_BAI_Manage_ApiServer/docs/pb_tbl_scheme_share.md)
|
||||
- [pb_tbl_scheme_template.md](/E:/Project_Class/BAI/Web_BAI_Manage_ApiServer/docs/pb_tbl_scheme_template.md)
|
||||
@@ -20,13 +20,13 @@
|
||||
| :--- | :--- | :---: | :--- |
|
||||
| `id` | `text` | 是 | PocketBase 记录主键 |
|
||||
| `cart_id` | `text` | 是 | 购物车项业务 ID,唯一标识 |
|
||||
| `cart_number` | `text` | 是 | 购物车名称 / 分组号,默认可按“用户名+年月日时分秒”生成 |
|
||||
| `cart_number` | `text` | 否 | 购物车名称 / 分组号,可为空;如需展示编号建议在 hooks / 业务侧补齐 |
|
||||
| `cart_create` | `autodate` | 否 | 购物车项创建时间,由数据库自动生成 |
|
||||
| `cart_owner` | `text` | 是 | 生成者 openid,约定保存 `tbl_auth_users.openid` |
|
||||
| `cart_product_id` | `text` | 是 | 产品 ID,建议保存 `tbl_product_list.prod_list_id` |
|
||||
| `cart_product_quantity` | `number` | 是 | 产品数量,建议业务侧约束为正整数 |
|
||||
| `cart_status` | `text` | 是 | 购物车状态,建议值:`有效` / `无效` |
|
||||
| `cart_at_price` | `number` | 是 | 加入购物车时的价格,用于后续降价提醒或对比 |
|
||||
| `cart_product_id` | `relation` | 是 | 原生关联 `tbl_product_list`,单选,保存的是目标产品记录的 PocketBase `recordId` |
|
||||
| `cart_product_quantity` | `number` | 否 | 产品数量,可为空;如传值,建议业务侧约束为正整数 |
|
||||
| `cart_status` | `text` | 否 | 购物车状态,可为空;如传值,建议值:`有效` / `无效` |
|
||||
| `cart_at_price` | `number` | 否 | 加入购物车时的价格,可为空;如传值用于后续降价提醒或对比 |
|
||||
| `cart_remark` | `text` | 否 | 备注 |
|
||||
| `is_delete` | `number` | 否 | 软删除标记,`0` 表示未删除,`1` 表示已删除,默认 `0` |
|
||||
|
||||
@@ -45,7 +45,12 @@
|
||||
|
||||
## 补充约定
|
||||
|
||||
- `cart_owner`、`cart_product_id` 当前按文本字段保存业务 ID,不直接建立 relation,便于兼容现有 hooks 业务模型。
|
||||
- `cart_owner` 当前按文本字段保存业务 ID。
|
||||
- `cart_product_id` 已改为 PocketBase 原生 `relation` 字段,关联目标集合为 `tbl_product_list`,且 `maxSelect = 1`。
|
||||
- 调用原生 records create / update 接口时,`cart_product_id` 必须传 **`tbl_product_list` 的 PocketBase 记录主键 `id`**,不能再传业务 ID `prod_list_id`。
|
||||
- 如前端当前拿到的是业务 ID `prod_list_id`,需先调用 `GET /pb/api/collections/tbl_product_list/records?filter=prod_list_id="..."&perPage=1&page=1` 查出对应 `recordId`,再把该 `recordId` 作为 `cart_product_id` 提交。
|
||||
- 当前原生 collection 层面,创建时仅要求客户端显式提交非空 `cart_owner`;不再强制要求与当前 token 对应 `openid` 相等。
|
||||
- 当前表结构层面,除 `cart_id`、`cart_owner`、`cart_product_id` 外,其余业务字段均允许为空。
|
||||
- `cart_owner` 统一保存 `tbl_auth_users.openid`,便于直接使用微信登录返回 token 做原生访问控制。
|
||||
- `is_delete` 用于软删除控制,购物车项删除时建议优先标记为 `1`。
|
||||
- 集合默认查询规则已内置 `is_delete = 0`,常规列表/详情不会返回已软删除数据。
|
||||
|
||||
73
docs/pb_tbl_scheme.md
Normal file
73
docs/pb_tbl_scheme.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# pb_tbl_scheme
|
||||
|
||||
> 来源:用户提供的结构草图(2026-04-08)与现有 `tbl_cart` / `tbl_order` owner 行级权限模式
|
||||
> 类型:`base`
|
||||
> 状态:`draft`,仅文档设计,尚未执行建表
|
||||
> 读写规则:任意已登录用户可新增,但仅可访问 `scheme_owner = 当前 token 对应 openid` 且 `is_delete = 0` 的记录
|
||||
|
||||
## 表用途
|
||||
|
||||
用于存储用户自己的方案主表,承载方案名称、适用酒店类型、方案筛选条件、房型配置、设备偏好以及引用的高/中/低端模板。
|
||||
|
||||
## 字段清单
|
||||
|
||||
| 字段名 | 类型 | 必填 | 说明 |
|
||||
| :--- | :--- | :---: | :--- |
|
||||
| `id` | `text` | 是 | PocketBase 记录主键 |
|
||||
| `scheme_id` | `text` | 是 | 方案业务 ID,唯一标识 |
|
||||
| `scheme_name` | `text` | 是 | 方案名称 |
|
||||
| `scheme_owner` | `text` | 是 | 方案所有者 openid,保存 `tbl_auth_users.openid` |
|
||||
| `scheme_share_status` | `text` | 否 | 方案分享状态,便于快速识别是否已分享 |
|
||||
| `scheme_expires_at` | `date` | 否 | 方案有效期 |
|
||||
| `scheme_hotel_type` | `text` | 否 | 酒店类型,如经济型 / 中高端 / 连锁型 / 特色名宿 / 特色酒店 |
|
||||
| `scheme_solution_type` | `text` | 否 | 方案类型,建议保存枚举或 `|` 聚合值 |
|
||||
| `scheme_solution_feature` | `text` | 否 | 方案特点,建议保存枚举或 `|` 聚合值 |
|
||||
| `scheme_room_type` | `json` | 否 | 房型配置,建议格式:`[{"room_type":"大床房","qty":20}]` |
|
||||
| `scheme_curtains` | `text` | 否 | 窗帘类型 |
|
||||
| `scheme_voice_device` | `text` | 否 | 语音设备 |
|
||||
| `scheme_ac_type` | `text` | 否 | 空调类型 |
|
||||
| `scheme_template_highend` | `text` | 否 | 高端模板 ID,建议保存 `tbl_scheme_template.scheme_template_id` |
|
||||
| `scheme_template_midend` | `text` | 否 | 中端模板 ID,建议保存 `tbl_scheme_template.scheme_template_id` |
|
||||
| `scheme_template_lowend` | `text` | 否 | 地端模板 ID,建议保存 `tbl_scheme_template.scheme_template_id` |
|
||||
| `scheme_status` | `text` | 否 | 方案状态,如草稿 / 生效 / 失效 |
|
||||
| `scheme_remark` | `text` | 否 | 备注 |
|
||||
| `is_delete` | `number` | 否 | 软删除标记,`0` 表示未删除,`1` 表示已删除,默认 `0` |
|
||||
|
||||
## 索引
|
||||
|
||||
| 索引名 | 类型 | 说明 |
|
||||
| :--- | :--- | :--- |
|
||||
| `idx_tbl_scheme_scheme_id` | `UNIQUE INDEX` | 保证 `scheme_id` 唯一 |
|
||||
| `idx_tbl_scheme_scheme_owner` | `INDEX` | 加速按方案所有者查询 |
|
||||
| `idx_tbl_scheme_scheme_name` | `INDEX` | 加速按方案名称检索 |
|
||||
| `idx_tbl_scheme_scheme_share_status` | `INDEX` | 加速按分享状态过滤 |
|
||||
| `idx_tbl_scheme_scheme_expires_at` | `INDEX` | 加速按有效期过滤 |
|
||||
| `idx_tbl_scheme_scheme_hotel_type` | `INDEX` | 加速按酒店类型过滤 |
|
||||
| `idx_tbl_scheme_scheme_solution_type` | `INDEX` | 加速按方案类型过滤 |
|
||||
| `idx_tbl_scheme_scheme_solution_feature` | `INDEX` | 加速按方案特点过滤 |
|
||||
| `idx_tbl_scheme_scheme_status` | `INDEX` | 加速按方案状态过滤 |
|
||||
| `idx_tbl_scheme_owner_status` | `INDEX` | 加速同一用户下按状态查询 |
|
||||
|
||||
## 建议 PocketBase 原生权限规则
|
||||
|
||||
说明:
|
||||
|
||||
- 采用和 `tbl_cart` / `tbl_order` 一致的 owner 行级隔离模式。
|
||||
- 这里按“任意已登录用户可创建自己的方案”设计,因此 `createRule` 仍要求携带有效 token。
|
||||
- 若后续由 hooks 自动回填 `scheme_owner`,也建议保留 `@request.body.scheme_owner = @request.auth.openid` 约束,避免越权代建。
|
||||
|
||||
| Rule | 建议表达式 |
|
||||
| :--- | :--- |
|
||||
| `listRule` | `@request.auth.id != "" && scheme_owner = @request.auth.openid && is_delete = 0` |
|
||||
| `viewRule` | `@request.auth.id != "" && scheme_owner = @request.auth.openid && is_delete = 0` |
|
||||
| `createRule` | `@request.auth.id != "" && @request.body.scheme_owner = @request.auth.openid` |
|
||||
| `updateRule` | `@request.auth.id != "" && scheme_owner = @request.auth.openid && is_delete = 0` |
|
||||
| `deleteRule` | `@request.auth.id != "" && scheme_owner = @request.auth.openid && is_delete = 0` |
|
||||
|
||||
## 补充约定
|
||||
|
||||
- `scheme_template_highend` / `scheme_template_midend` / `scheme_template_lowend` 当前建议先保存模板业务 ID,不直接建立 relation,便于兼容现有 hooks 风格。
|
||||
- `scheme_room_type` 推荐使用 `json` 数组,避免后续字符串解析成本。
|
||||
- `scheme_solution_type` 与 `scheme_solution_feature` 如果后续要做模板筛选,建议统一保存字典枚举值,而不是自由文本。
|
||||
- `is_delete` 用于软删除控制;对外列表、详情、修改、删除规则都建议默认排除已删除数据。
|
||||
- PocketBase 系统字段 `created`、`updated` 仍然存在,只是不在 collection 字段清单里单独声明。
|
||||
71
docs/pb_tbl_scheme_share.md
Normal file
71
docs/pb_tbl_scheme_share.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# pb_tbl_scheme_share
|
||||
|
||||
> 来源:用户提供的结构草图(2026-04-08)与本次 owner 行级权限要求
|
||||
> 类型:`base`
|
||||
> 状态:`draft`,仅文档设计,尚未执行建表
|
||||
> 读写规则:任意已登录用户可新增,但仅可访问 `scheme_share_owner = 当前 token 对应 openid` 且 `is_delete = 0` 的记录
|
||||
|
||||
## 表用途
|
||||
|
||||
用于存储方案分享记录,描述某个方案被分享给谁、分享权限、有效期以及接收状态。
|
||||
|
||||
## 关键设计说明
|
||||
|
||||
原始草图里没有 owner 字段,但你要求这 3 张表统一采用 `xxx_owner = 当前 token 对应 openid` 的 PB 行级约束。
|
||||
|
||||
因此本表文档中补充新增:
|
||||
|
||||
- `scheme_share_owner`
|
||||
|
||||
该字段用于表示“谁发起了这条分享记录”,并作为 PocketBase 原生访问控制的 owner 锚点。
|
||||
|
||||
## 字段清单
|
||||
|
||||
| 字段名 | 类型 | 必填 | 说明 |
|
||||
| :--- | :--- | :---: | :--- |
|
||||
| `id` | `text` | 是 | PocketBase 记录主键 |
|
||||
| `scheme_share_id` | `text` | 是 | 分享业务 ID,唯一标识 |
|
||||
| `scheme_id` | `text` | 是 | 关联方案 ID,建议保存 `tbl_scheme.scheme_id` |
|
||||
| `scheme_share_owner` | `text` | 是 | 分享发起人 openid,用于 owner 行级权限控制 |
|
||||
| `scheme_share_to` | `text` | 是 | 被分享目标用户标识,建议保存目标用户 openid |
|
||||
| `scheme_share_acceptance_status` | `text` | 否 | 分享接收状态,如待接收 / 已接收 / 已参与 / 已拒绝 |
|
||||
| `scheme_share_expires_at` | `date` | 否 | 分享有效期 |
|
||||
| `scheme_share_permission` | `text` | 否 | 分享权限,如只读 / 可复制 / 可编辑 |
|
||||
| `scheme_share_remark` | `text` | 否 | 分享备注 |
|
||||
| `is_delete` | `number` | 否 | 软删除标记,`0` 表示未删除,`1` 表示已删除,默认 `0` |
|
||||
|
||||
## 索引
|
||||
|
||||
| 索引名 | 类型 | 说明 |
|
||||
| :--- | :--- | :--- |
|
||||
| `idx_tbl_scheme_share_scheme_share_id` | `UNIQUE INDEX` | 保证 `scheme_share_id` 唯一 |
|
||||
| `idx_tbl_scheme_share_scheme_id` | `INDEX` | 加速按方案查询分享记录 |
|
||||
| `idx_tbl_scheme_share_scheme_share_owner` | `INDEX` | 加速按分享发起人查询 |
|
||||
| `idx_tbl_scheme_share_scheme_share_to` | `INDEX` | 加速按被分享目标查询 |
|
||||
| `idx_tbl_scheme_share_acceptance_status` | `INDEX` | 加速按接收状态过滤 |
|
||||
| `idx_tbl_scheme_share_expires_at` | `INDEX` | 加速按有效期过滤 |
|
||||
| `idx_tbl_scheme_share_owner_to` | `INDEX` | 加速同一发起人向某目标用户的查询 |
|
||||
| `idx_tbl_scheme_share_unique_map` | `UNIQUE INDEX` | 保证同一发起人对同一方案给同一目标的分享记录唯一 |
|
||||
|
||||
## 建议 PocketBase 原生权限规则
|
||||
|
||||
说明:
|
||||
|
||||
- 严格按你的要求,所有删改查都只允许 owner 访问。
|
||||
- 这意味着“被分享人”不能直接通过 PocketBase 原生 records API 读取这张表;如果后续要支持被分享方直连访问,需要另行放宽 `listRule` / `viewRule` 或改由 hooks 中转。
|
||||
|
||||
| Rule | 建议表达式 |
|
||||
| :--- | :--- |
|
||||
| `listRule` | `@request.auth.id != "" && scheme_share_owner = @request.auth.openid && is_delete = 0` |
|
||||
| `viewRule` | `@request.auth.id != "" && scheme_share_owner = @request.auth.openid && is_delete = 0` |
|
||||
| `createRule` | `@request.auth.id != "" && @request.body.scheme_share_owner = @request.auth.openid` |
|
||||
| `updateRule` | `@request.auth.id != "" && scheme_share_owner = @request.auth.openid && is_delete = 0` |
|
||||
| `deleteRule` | `@request.auth.id != "" && scheme_share_owner = @request.auth.openid && is_delete = 0` |
|
||||
|
||||
## 补充约定
|
||||
|
||||
- `scheme_share_to` 当前建议保存目标用户 `openid`,这样后续如果要做 hooks 查询或消息通知,字段可直接复用。
|
||||
- 若后续要支持“接收方修改 `scheme_share_acceptance_status`”,则当前 owner-only 原生规则不够,需要追加 hooks 或重新设计 PB 规则。
|
||||
- 推荐把 `scheme_share_permission` 控制在有限枚举内,例如:`readonly`、`copyable`、`editable`。
|
||||
- `is_delete` 用于软删除控制,撤销分享时建议优先标记为 `1`。
|
||||
- PocketBase 系统字段 `created`、`updated` 仍然存在,只是不在 collection 字段清单里单独声明。
|
||||
59
docs/pb_tbl_scheme_template.md
Normal file
59
docs/pb_tbl_scheme_template.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# pb_tbl_scheme_template
|
||||
|
||||
> 来源:用户提供的结构草图(2026-04-08)与现有附件 / 产品字段设计规范
|
||||
> 类型:`base`
|
||||
> 状态:`draft`,仅文档设计,尚未执行建表
|
||||
> 读写规则:任意已登录用户可新增,但仅可访问 `scheme_template_owner = 当前 token 对应 openid` 且 `is_delete = 0` 的记录
|
||||
|
||||
## 表用途
|
||||
|
||||
用于存储方案模板,作为方案配置时可复用的标准模板库,承载图标、标签、方案适配条件以及模板内产品清单。
|
||||
|
||||
## 字段清单
|
||||
|
||||
| 字段名 | 类型 | 必填 | 说明 |
|
||||
| :--- | :--- | :---: | :--- |
|
||||
| `id` | `text` | 是 | PocketBase 记录主键 |
|
||||
| `scheme_template_id` | `text` | 是 | 模板业务 ID,唯一标识 |
|
||||
| `scheme_template_icon` | `text` | 否 | 模板图标,建议保存 `tbl_attachments.attachments_id` |
|
||||
| `scheme_template_label` | `text` | 否 | 模板标签,便于关键词检索 |
|
||||
| `scheme_template_name` | `text` | 是 | 模板名称 |
|
||||
| `scheme_template_owner` | `text` | 是 | 模板所有者 openid,保存 `tbl_auth_users.openid` |
|
||||
| `scheme_template_status` | `text` | 否 | 模板状态,如有效 / 主推 / 过期 |
|
||||
| `scheme_template_solution_type` | `text` | 否 | 适用方案类型 |
|
||||
| `scheme_template_solution_feature` | `text` | 否 | 适用方案特点 |
|
||||
| `scheme_template_product_list` | `json` | 否 | 产品清单,建议格式:`[{"product_id":"PROD-xxx","qty":5,"note":"客厅使用"}]` |
|
||||
| `scheme_template_description` | `text` | 否 | 模板说明 |
|
||||
| `scheme_template_remark` | `text` | 否 | 备注 |
|
||||
| `is_delete` | `number` | 否 | 软删除标记,`0` 表示未删除,`1` 表示已删除,默认 `0` |
|
||||
|
||||
## 索引
|
||||
|
||||
| 索引名 | 类型 | 说明 |
|
||||
| :--- | :--- | :--- |
|
||||
| `idx_tbl_scheme_template_scheme_template_id` | `UNIQUE INDEX` | 保证 `scheme_template_id` 唯一 |
|
||||
| `idx_tbl_scheme_template_scheme_template_owner` | `INDEX` | 加速按模板所有者查询 |
|
||||
| `idx_tbl_scheme_template_scheme_template_name` | `INDEX` | 加速按模板名称检索 |
|
||||
| `idx_tbl_scheme_template_scheme_template_label` | `INDEX` | 加速按模板标签检索 |
|
||||
| `idx_tbl_scheme_template_scheme_template_status` | `INDEX` | 加速按模板状态过滤 |
|
||||
| `idx_tbl_scheme_template_solution_type` | `INDEX` | 加速按适用方案类型过滤 |
|
||||
| `idx_tbl_scheme_template_solution_feature` | `INDEX` | 加速按适用方案特点过滤 |
|
||||
| `idx_tbl_scheme_template_owner_status` | `INDEX` | 加速同一用户下按状态查询 |
|
||||
|
||||
## 建议 PocketBase 原生权限规则
|
||||
|
||||
| Rule | 建议表达式 |
|
||||
| :--- | :--- |
|
||||
| `listRule` | `@request.auth.id != "" && scheme_template_owner = @request.auth.openid && is_delete = 0` |
|
||||
| `viewRule` | `@request.auth.id != "" && scheme_template_owner = @request.auth.openid && is_delete = 0` |
|
||||
| `createRule` | `@request.auth.id != "" && @request.body.scheme_template_owner = @request.auth.openid` |
|
||||
| `updateRule` | `@request.auth.id != "" && scheme_template_owner = @request.auth.openid && is_delete = 0` |
|
||||
| `deleteRule` | `@request.auth.id != "" && scheme_template_owner = @request.auth.openid && is_delete = 0` |
|
||||
|
||||
## 补充约定
|
||||
|
||||
- `scheme_template_icon` 建议延续现有项目做法,仅保存 `attachments_id`,真实文件统一走 `tbl_attachments`。
|
||||
- `scheme_template_product_list` 建议使用 `json` 数组,单项推荐结构:`product_id`、`qty`、`note`;不要保存自由格式长字符串。
|
||||
- 若模板将来需要“官方模板 + 用户私有模板”并存,则需要额外引入发布状态字段或放宽公共模板读取规则;当前文档严格按 owner 私有模板设计。
|
||||
- `is_delete` 用于软删除控制,模板删除时建议优先标记为 `1`。
|
||||
- PocketBase 系统字段 `created`、`updated` 仍然存在,只是不在 collection 字段清单里单独声明。
|
||||
Reference in New Issue
Block a user