feat(user-permission): 实现用户权限体系并修复所有问题

- 数据库层面:
  - 创建 RBAC 核心表(角色、菜单权限)
  - 扩展现有表支持数据共享
  - 初始化基础数据

- 后端层面:
  - 实现 UserContext 用户上下文管理
  - 实现数据集访问权限服务
  - 实现菜单权限服务
  - 添加数据集共享功能
  - 修复前端命名不匹配问题(snake_case vs camelCase)
  - 修复请求头不匹配问题(X-User-Roles vs X-Role-Codes)
  - 修复 Mapper 方法未实现问题
  - 修复共享设置持久化缺失问题

- 前端层面:
  - 创建菜单权限工具
  - 更新 Redux Store 支持菜单过滤
  - 创建数据集共享设置组件
  - 添加用户信息到请求头
  - 实现 Token 刷新逻辑

- 数据隔离:
  - 实现 MyBatis 查询权限检查
  - 实现数据文件访问控制

参考:
- Codex 生成的实施方案
- kimI-cli 实施结果
- Codex Review 审核报告

修复的问题:
1. 前端命名不匹配(is_shared -> isShared, shared_with -> sharedWith)
2. 请求头不匹配(X-User-Roles -> X-Role-Codes)
3. Mapper 方法未实现(添加 findFilesWithAccessCheck 等方法声明)
4. 共享设置持久化缺失(添加 isShared 和 sharedWith 字段到 UpdateDatasetRequest)
5. 用户上下文加载问题(实现 Token 刷新逻辑)
This commit is contained in:
2026-02-04 04:33:13 +00:00
parent 3730973adf
commit 4765349fd7
22 changed files with 4840 additions and 0 deletions

298
memory/2026-02-03-0845.md Normal file
View File

@@ -0,0 +1,298 @@
# Session: 2026-02-03 08:45:39 UTC
- **Session Key**: agent:main:telegram:group:-1003879848304
- **Session ID**: 5e8d9a2c-61f3-4dc8-b9db-96b28a3ffddb
- **Source**: telegram
## Conversation Summary
assistant: 让我尝试搜索包含相关代码的文件:
assistant: 根据之前的成功操作,让我使用 `StrReplaceFile` 工具来修改文件。我将分两步进行:
**第一步:在 `createTask` 函数中立即显示任务中心**
assistant: 让我使用 `Exec` 工具来执行修改:
assistant: 抱歉,当前环境中的文件操作工具似乎无法正常工作。不过,根据我之前的代码分析,我可以为你提供**手动修改问题1的详细指南**。
## 问题1修复指南
### 需要修改的文件
`frontend/src/hooks/useSliceUpload.tsx`
### 修改步骤
**修改1:在 `createTask` 函数中添加立即显示任务中心的代码**
找到 `createTask` 函数(大约在第22行),在 `return task;` 之前添加以下代码:
```typescript
const createTask = (detail: any = {}) => {
const { dataset } = detail;
const title = `上传数据集: ${dataset.name} `;
const controller = new AbortController();
const task: TaskItem = {
key: dataset.id,
title,
percent: 0,
reqId: -1,
controller,
size: 0,
updateEvent: detail.updateEvent,
hasArchive: detail.hasArchive,
prefix: detail.prefix,
};
taskListRef.current = [task, ...taskListRef.current];
setTaskList(taskListRef.current);
// ===== 添加以下代码 =====
// 立即显示任务中心,让用户感知上传已开始
if (showTaskCenter) {
window.dispatchEvent(
new CustomEvent("show:task-popover", { detail: { show: true } })
);
}
// ===== 添加结束 =====
return task;
};
```
**修改2:移除 `uploadFile` 函数中重复触发任务中心的代码**
找到 `uploadFile` 函数(大约在第127行),删除或注释掉以下重复的代码:
```typescript
async function uploadFile({ task, files, totalSize }) {
// ... preUpload 相关代码 ...
const newTask: TaskItem = {
// ... newTask 定义 ...
};
updateTaskList(newTask);
// ===== 删除或注释以下代码 =====
/*
if (showTaskCenter) {
window.dispatchEvent(
new CustomEvent("show:task-popover", { detail: { show: true } })
);
}
*/
// 添加注释说明:
// 注意:show:task-popover 事件已在 createTask 中触发,此处不再重复触发
// 更新数据状态
if (task.updateEvent) window.dispatchEvent(new Event(task.updateEvent));
// ... 上传逻辑 ...
}
```
### 修改原理
1. **原问题**`show:task-popover` 事件是在 `preUpload` 异步接口调用完成后才触发的,导致延迟
2. **解决方案**:在 `createTask` 函数中(即任务创建时)立即触发 `show:task-popover` 事件
3. **效果**:用户点击确认后,上传弹窗消失,任务中心立即弹出,显示上传进度
### 验证修改
修改完成后,请测试:
1. 进入数据集详情页
2. 点击"导入数据"上传文件
3. 点击"确认"
4. **预期结果**:弹窗消失后,任务中心立即弹出
---
如果你无法手动修改这些文件,请告诉我,我可以尝试其他方式帮助你。或者,如果工具环境恢复正常,我可以直接为你应用这些修改。
user: [Telegram OpenClaw Coding id:-1003879848304 +1m 2026-02-03 08:25 UTC] Jerry Yan (5155645359): 请帮我修改openclaw的配置文件,为:tools.elevated.enabled 改成true
[message_id: 44]
assistant: 好的,我来帮你修改 openclaw 的配置文件,将 `tools.elevated.enabled` 设置为 `true`
让我先查找 openclaw 的配置文件位置:
assistant: 让我尝试直接创建配置文件:
assistant: 抱歉,当前环境的文件操作工具似乎无法正常工作。不过我可以为你提供**手动修改 openclaw 配置的详细指南**:
## 手动修改 openclaw 配置
### 方法1:使用命令行修改
在你的终端中执行以下命令:
```bash
# 1. 查找 openclaw 配置文件
ls -la ~/.openclaw/
# 2. 如果不存在,创建目录和配置文件
mkdir -p ~/.openclaw
# 3. 创建或编辑配置文件
cat > ~/.openclaw/config.json << 'EOF'
{
"tools": {
"elevated": {
"enabled": true
}
}
}
EOF
# 4. 验证配置
cat ~/.openclaw/config.json
```
### 方法2:使用文本编辑器修改
1. 打开 openclaw 配置文件:
```bash
code ~/.openclaw/config.json
# 或
vim ~/.openclaw/config.json
```
2. 确保配置文件内容如下:
```json
{
"tools": {
"elevated": {
"enabled": true
}
}
}
```
3. 保存文件
### 方法3:在 openclaw 界面中修改
1. 打开 openclaw 应用
2. 进入设置(Settings)
3. 找到"Tools"或"Advanced"选项
4. 启用"Tools Elevated"选项
### 验证配置
修改完成后,你可以通过以下方式验证:
```bash
# 查看配置文件内容
cat ~/.openclaw/config.json
# 或者使用 jq 格式化显示(如果安装了 jq)
cat ~/.openclaw/config.json | jq .
```
---
如果你能提供配置文件的当前内容,我可以帮你生成准确的修改命令。或者,如果工具环境恢复正常,我可以直接帮你应用修改。
user: [Telegram OpenClaw Coding id:-1003879848304 +6m 2026-02-03 08:34 UTC] Jerry Yan (5155645359): 我已经修改了配置,现在尝试修改文件,检查是否正常
[message_id: 48]
assistant: 好的,我来测试文件修改功能是否正常。让我先读取之前分析的文件:
assistant: 看起来当前环境中的文件操作工具仍然无法正常工作。让我尝试一个简单的测试:
assistant: 抱歉,当前环境中的所有文件操作工具(ReadFile, WriteFile, Glob, Bash, Exec 等)都无法正常工作。
这可能是由于以下原因:
1. 环境配置问题
2. 权限限制
3. 工具服务暂时不可用
## 当前情况
由于工具无法工作,我无法:
- 读取文件内容
- 修改文件(包括修复问题1)
- 验证配置文件修改结果
## 建议
1. **如果你有服务器终端访问权限**,可以手动应用我之前提供的修复方案:
```bash
# 编辑文件
vi frontend/src/hooks/useSliceUpload.tsx
# 或者使用 VS Code Remote SSH 等工具直接修改文件
```
2. **等待环境恢复**:管理员可能正在修复工具服务问题
3. **临时解决方案**:如果问题1(任务中心延迟弹出)影响使用,可以尝试在浏览器控制台中手动触发事件来测试:
```javascript
// 在浏览器控制台中测试
window.dispatchEvent(
new CustomEvent("show:task-popover", { detail: { show: true } })
);
```
如果你有其他方式可以访问或修改这些文件,或者你能提供文件的具体内容,我可以帮你生成准确的修改后的代码,你手动复制粘贴即可。
你想采取哪种方式继续?
user: GatewayRestart:
{
"kind": "update",
"status": "ok",
"ts": 1770108045767,
"sessionKey": "agent:main:telegram:group:-1003879848304",
"message": null,
"doctorHint": "Run: openclaw doctor --non-interactive",
"stats": {
"mode": "npm",
"root": "/usr/lib/node_modules/openclaw",
"before": {
"version": "2026.1.29"
},
"after": {
"version": "2026.2.1"
},
"steps": [
{
"name": "global update",
"command": "npm i -g openclaw@latest",
"cwd": "/usr/lib/node_modules/openclaw",
"durationMs": 34622,
"log": {
"stdoutTail": "\nadded 28 packages, removed 4 packages, and changed 671 packages in 35s",
"stderrTail": "npm warn deprecated npmlog@6.0.2: This package is no longer supported.\nnpm warn deprecated are-we-there-yet@3.0.1: This package is no longer supported.\nnpm warn deprecated gauge@4.0.4: This package is no longer supported.\nnpm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead",
"exitCode": 0
}
}
],
"reason": null,
"durationMs": 34741
}
}
assistant: 太好了!openclaw 刚刚从 2026.1.29 更新到了 2026.2.1。让我测试一下文件工具是否恢复正常:
assistant: 抱歉,看起来即使 openclaw 更新后,文件操作工具仍然无法工作。所有工具(ReadFile, WriteFile, Glob, Bash, Exec 等)都返回"not found"错误。
## 当前情况
**openclaw 已更新**:
- 从 2026.1.29 → 2026.2.1
- `tools.elevated.enabled` 你已修改为 true
**但工具状态**:
- ❌ 所有文件操作工具不可用
- ❌ 无法读取文件内容
- ❌ 无法修改文件
## 可能的原因
1. **openclaw 更新后需要重启 session** 才能生效
2. **权限问题**:elevated tools 可能需要额外的系统权限配置
3. **服务重启**:后台服务可能需要重启
## 建议
1. **等待管理员介入**:这可能是系统层面的问题,需要管理员检查 openclaw 服务状态
2. **手动修改方案**:我可以继续为你提供详细的修改指南和代码,你手动复制到对应文件中
3. **验证 elevated tools**:你可以在终端中运行:
```bash
openclaw doctor --non-interactive
```
查看工具状态
如果你希望我继续提供手动修改的详细代码方案(包括问题1的修复和问题2的后端实现),请告诉我,我会以纯文本形式提供完整的修改内容。