fix(用户管理): 修复用户列表页面加载失败问题
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled

修复用户列表页面加载失败导致测试超时的问题,确保页面元素正确渲染
This commit is contained in:
iven
2026-04-19 08:46:28 +08:00
parent 0ee9d22634
commit 841766b168
174 changed files with 26366 additions and 675 deletions

View File

@@ -443,3 +443,72 @@ let limits = StoreLimitsBuilder::new()
- **动态表**: 支持 `db_insert("dynamic_table", ...)` 自动创建/迁移表
- **前端集成**: PluginCRUDPage 组件根据 WIT 定义自动生成 CRUD 页面
- **插件市场**: 插件元数据版本管理签名验证
## 插件权限系统(关键)
### 权限码格式
插件数据操作的权限码由 `data_handler.rs` 中的 `compute_permission_code()` 按以下规则自动生成
```
{manifest_id}.{url_entity_name}.{action_suffix}
```
- `manifest_id`plugin.toml `[metadata].id` `erp-crm`
- `url_entity_name`REST API 路径中的实体名 `customer_tag`
- `action_suffix``list`读操作 `manage`写操作
| 操作 | 权限码示例 |
|------|-----------|
| 列表/详情 | `erp-crm.customer.list` |
| 创建/更新/删除 | `erp-crm.customer.manage` |
### 权限码命名铁律P0 级)
**`plugin.toml` `permissions[].code` 的前缀必须与 `schema.entities[].name` 完全一致。**
```
data_handler 生成:{manifest_id}.{url_entity_name}.{action}
↑ 来自 URL 路径中的 entity 参数
manifest 声明: {entity_name}.{action}
↑ 必须与 URL 中的 entity name 匹配
```
每个实体必须同时声明 `.list` `.manage` 两个权限
```toml
# ✅ 正确:权限码前缀与实体名一致
[[schema.entities]]
name = "customer_tag"
[[permissions]]
code = "customer_tag.list" # 匹配!
[[permissions]]
code = "customer_tag.manage" # 匹配!
# ❌ 错误:权限码用了简写,与实体名不一致 → 403
[[permissions]]
code = "tag.manage" # data_handler 生成 erp-crm.customer_tag.manage
# 但 DB 中只有 erp-crm.tag.manage → 403
```
**历史教训:** CRM 插件首个版本中`customer_tag` 实体的权限码写成了 `tag.manage``customer_relationship` 实体的权限码写成了 `relationship.list/manage`结果标签管理客户关系关系图谱三个页面全部 403修复迁移`m20260419_000038_fix_crm_permission_codes.rs`
### 权限注册流程
1. **插件安装时** `register_plugin_permissions()` manifest 中声明的权限批量 INSERT `permissions` `ON CONFLICT DO NOTHING` 保证幂等
2. **权限分配** `grant_permissions_to_admin()` 自动将权限分配给 admin 角色
3. **运行时校验** `data_handler.rs` `compute_permission_code()` URL entity name 生成权限码通过 `require_permission()` 检查 JWT 中的权限列表
### 已修复问题
| 问题 | 修复 |
|------|------|
| 权限未自动分配给 admin 角色 403 | `grant_permissions_to_admin()` install/enable 时自动调用 |
| 权限码与实体名不匹配 403 | 迁移 m20260419_000038 + plugin.toml 修正 |
### 插件 API 路由注意事项
- 后端路由使用 `Path<(Uuid, String)>` 解析 `plugin_id`必须是 UUID 格式
- 前端使用 `plugin.id`数据库 UUID而非 `manifest_id` `erp-crm`构建请求 URL
- 直接用 manifest_id 调用 API 会返回 `UUID parsing failed` 错误