feat: 增强 PocketBase hooks 认证功能

- 更新微信登录、平台注册/登录、资料更新、token 刷新、认证落库等功能,统一使用 openid 作为全平台身份锚点。
- 新增平台用户注册和登录接口,支持手机号和密码认证。
- 实现系统级 token 刷新接口,支持通过微信 code 重新签发 token。
- 新增用户总数查询接口,返回 tbl_auth_users 表中的用户总数。
- 更新 OpenAPI 文档,反映新的接口和数据结构。
- 修改数据库结构,调整字段名称和索引。
- 新增页面示例,展示基本的 HTML 页面结构。
This commit is contained in:
2026-03-25 20:03:46 +08:00
parent 02d5686c7b
commit 6490fc427f
20 changed files with 971 additions and 90 deletions

190
docs/tbl_auth_tables.md Normal file
View File

@@ -0,0 +1,190 @@
# tbl_auth 系列表结构说明
> 数据来源:`script/pocketbase.newpb.js`
>
> 说明:以下为当前脚本中定义的 `tbl_auth_` 系列 PocketBase 集合结构,不含 PocketBase `auth` 集合的系统内置字段,仅列出脚本中显式声明的自定义字段与索引。
---
## 1. `tbl_auth_users`
- 集合类型:`auth`
- 说明:认证用户主表,业务身份锚点为 `openid`
### 字段
| 字段名 | 类型 | 必填 | 备注 |
| :--- | :--- | :---: | :--- |
| `users_convers_id` | `text` | 否 | 会话/对话侧用户 ID |
| `openid` | `text` | 是 | 微信身份锚点,唯一索引 |
| `org_id` | `number` | 否 | 组织/部门 ID |
| `users_rank_level` | `number` | 否 | 等级 |
| `users_status` | `number` | 否 | 状态 |
| `users_auth_type` | `number` | 否 | 账户类型 |
| `users_id` | `text` | 否 | 自定义用户 ID |
| `users_name` | `text` | 否 | 用户姓名 |
| `users_idtype` | `text` | 否 | 证件类型 |
| `users_id_number` | `text` | 否 | 证件号 |
| `users_phone` | `text` | 否 | 手机号 |
| `users_level` | `text` | 否 | 用户等级 |
| `users_type` | `text` | 否 | 用户类型 |
| `users_status` | `text` | 否 | 用户状态 |
| `company_id` | `text` | 否 | 公司 ID |
| `users_parent_id` | `text` | 否 | 上级用户 ID |
| `users_promo_code` | `text` | 否 | 推广码 |
| `users_id_pic_a` | `file` | 否 | 证件照正面,`maxSelect: 1`,允许 `jpeg/png/webp` |
| `users_id_pic_b` | `file` | 否 | 证件照反面,`maxSelect: 1`,允许 `jpeg/png/webp` |
| `users_title_picture` | `file` | 否 | 资质照片,`maxSelect: 1`,允许 `jpeg/png/webp` |
| `users_picture` | `text` | 否 | 用户头像 |
| `usergroups_id` | `text` | 否 | 用户组 ID |
### 索引
| 索引名 | 类型 | 字段 |
| :--- | :--- | :--- |
| `idx_tbl_auth_users_users_convers_id` | UNIQUE INDEX | `users_convers_id` |
| `idx_tbl_auth_users_openid` | UNIQUE INDEX | `openid` |
| `idx_tbl_auth_users_org_id` | INDEX | `org_id` |
| `idx_tbl_auth_users_users_rank_level` | INDEX | `users_rank_level` |
| `idx_tbl_auth_users_users_status` | INDEX | `users_status` |
| `idx_tbl_auth_users_users_auth_type` | INDEX | `users_auth_type` |
| `idx_tbl_auth_users_users_phone` | INDEX | `users_phone` |
| `idx_tbl_auth_users_company_id` | INDEX | `company_id` |
| `idx_tbl_auth_users_usergroups_id` | INDEX | `usergroups_id` |
| `idx_tbl_auth_users_users_parent_id` | INDEX | `users_parent_id` |
---
## 2. `tbl_auth_resources`
- 集合类型:`base`
- 说明:受控资源定义表
### 字段
| 字段名 | 类型 | 必填 | 备注 |
| :--- | :--- | :---: | :--- |
| `res_id` | `text` | 是 | 资源 ID |
| `table_name` | `text` | 是 | 表名 |
| `column_name` | `text` | 否 | 字段名 |
| `res_type` | `text` | 是 | 资源类型 |
### 索引
| 索引名 | 类型 | 字段 |
| :--- | :--- | :--- |
| `idx_tbl_auth_resources_res_id` | UNIQUE INDEX | `res_id` |
| `idx_tbl_auth_resources_table_name` | INDEX | `table_name` |
| `idx_tbl_auth_resources_res_type` | INDEX | `res_type` |
| `idx_tbl_auth_resources_unique_res` | UNIQUE INDEX | `table_name, column_name, res_type` |
---
## 3. `tbl_auth_roles`
- 集合类型:`base`
- 说明:角色定义表
### 字段
| 字段名 | 类型 | 必填 | 备注 |
| :--- | :--- | :---: | :--- |
| `role_id` | `text` | 是 | 角色 ID |
| `role_name` | `text` | 是 | 角色名称 |
| `role_code` | `text` | 否 | 角色编码 |
| `role_status` | `number` | 否 | 角色状态 |
| `role_remark` | `text` | 否 | 备注 |
### 索引
| 索引名 | 类型 | 字段 |
| :--- | :--- | :--- |
| `idx_tbl_auth_roles_role_id` | UNIQUE INDEX | `role_id` |
| `idx_tbl_auth_roles_role_name` | UNIQUE INDEX | `role_name` |
| `idx_tbl_auth_roles_role_code` | UNIQUE INDEX | `role_code` |
---
## 4. `tbl_auth_role_perms`
- 集合类型:`base`
- 说明:角色权限映射表
### 字段
| 字段名 | 类型 | 必填 | 备注 |
| :--- | :--- | :---: | :--- |
| `role_perm_id` | `text` | 是 | 角色权限记录 ID |
| `role_id` | `text` | 是 | 角色 ID |
| `res_id` | `text` | 是 | 资源 ID |
| `access_level` | `number` | 是 | 权限级别 |
| `priority` | `number` | 否 | 优先级 |
### 索引
| 索引名 | 类型 | 字段 |
| :--- | :--- | :--- |
| `idx_tbl_auth_role_perms_role_perm_id` | UNIQUE INDEX | `role_perm_id` |
| `idx_tbl_auth_role_perms_role_id` | INDEX | `role_id` |
| `idx_tbl_auth_role_perms_res_id` | INDEX | `res_id` |
| `idx_tbl_auth_role_perms_unique_map` | UNIQUE INDEX | `role_id, res_id` |
---
## 5. `tbl_auth_user_overrides`
- 集合类型:`base`
- 说明:用户个性化权限覆盖表
### 字段
| 字段名 | 类型 | 必填 | 备注 |
| :--- | :--- | :---: | :--- |
| `override_id` | `text` | 是 | 覆盖记录 ID |
| `users_convers_id` | `text` | 是 | 用户会话标识 |
| `res_id` | `text` | 是 | 资源 ID |
| `access_level` | `number` | 是 | 权限级别 |
| `priority` | `number` | 否 | 优先级 |
### 索引
| 索引名 | 类型 | 字段 |
| :--- | :--- | :--- |
| `idx_tbl_auth_user_overrides_override_id` | UNIQUE INDEX | `override_id` |
| `idx_tbl_auth_user_overrides_users_convers_id` | INDEX | `users_convers_id` |
| `idx_tbl_auth_user_overrides_res_id` | INDEX | `res_id` |
| `idx_tbl_auth_user_overrides_unique_map` | UNIQUE INDEX | `users_convers_id, res_id` |
---
## 6. `tbl_auth_row_scopes`
- 集合类型:`base`
- 说明:行级权限范围表
### 字段
| 字段名 | 类型 | 必填 | 备注 |
| :--- | :--- | :---: | :--- |
| `scope_id` | `text` | 是 | 范围记录 ID |
| `target_type` | `text` | 是 | 目标类型 |
| `target_id` | `text` | 是 | 目标 ID |
| `table_name` | `text` | 是 | 作用表名 |
| `filter_sql` | `editor` | 是 | 行级过滤表达式 |
### 索引
| 索引名 | 类型 | 字段 |
| :--- | :--- | :--- |
| `idx_tbl_auth_row_scopes_scope_id` | UNIQUE INDEX | `scope_id` |
| `idx_tbl_auth_row_scopes_target_type` | INDEX | `target_type` |
| `idx_tbl_auth_row_scopes_target_id` | INDEX | `target_id` |
| `idx_tbl_auth_row_scopes_table_name` | INDEX | `table_name` |
---
## 备注
1. `tbl_auth_users``auth` 集合,除上表字段外,还会受 PocketBase auth 系统字段与认证配置影响。
2. 当前文档仅以 `script/pocketbase.newpb.js` 为准,不代表线上数据库已经 100% 同步成功。
3. 若你需要,我可以继续帮你再生成一份“更像数据库设计说明书”的版本,增加字段含义、业务用途、关联关系三列。