docs: 确认用户数据库隔离问题
问题发现: - Momentry Studio 硬编码 demo.sqlite - 违反'一用户一数据库'设计原则 - 所有用户共享同一数据库 检查结果: - Momentry Studio: 只有 1 个 demo.sqlite ❌ - MarkBase Core: 3 个用户数据库 ✅ 修复方案: 1. 方案 1: 函数参数传递 (推荐) - db_path(username) 动态生成路径 - 所有数据库函数添加 username 参数 2. 方案 2: 环境变量 (折中) - MOMENTRY_CURRENT_USER 环境变量 - db_path() 读取环境变量 3. 方案 3: 全局状态 (Tauri State) - 线程安全的状态管理 - 集中管理用户状态 受影响功能: - 搜索历史 - 书签 - 视频标记 - 用户认证 (例外,保持共享) 工作量: 2-3 天 优先级: 高 (影响数据隔离) 文档: - docs/USER_DATABASE_ISOLATION_FIX.md - 详细修复方案 - scripts/check_user_isolation.sh - 检查脚本
This commit is contained in:
126
scripts/check_user_isolation.sh
Executable file
126
scripts/check_user_isolation.sh
Executable file
@@ -0,0 +1,126 @@
|
||||
#!/bin/bash
|
||||
# 用户数据库隔离检查脚本
|
||||
|
||||
echo "================================================================================
|
||||
用户数据库隔离检查
|
||||
================================================================================
|
||||
"
|
||||
|
||||
USER_HOME=$(eval echo ~${SUDO_USER:-$USER})
|
||||
|
||||
echo "1. 检查数据库文件"
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
|
||||
# 检查 Momentry Studio 数据库
|
||||
STUDIO_DB_DIR="/Users/accusys/momentry_studio/data/users"
|
||||
if [ -d "$STUDIO_DB_DIR" ]; then
|
||||
echo "Momentry Studio 数据库目录:"
|
||||
ls -lh "$STUDIO_DB_DIR"/*.sqlite 2>/dev/null || echo " ❌ 无数据库文件"
|
||||
|
||||
echo ""
|
||||
echo "数据库数量: $(ls "$STUDIO_DB_DIR"/*.sqlite 2>/dev/null | wc -l | tr -d ' ')"
|
||||
|
||||
# 检查是否只有一个 demo.sqlite
|
||||
if [ -f "$STUDIO_DB_DIR/demo.sqlite" ] && [ $(ls "$STUDIO_DB_DIR"/*.sqlite 2>/dev/null | wc -l) -eq 1 ]; then
|
||||
echo " ⚠️ 只有 demo.sqlite,违反'一用户一数据库'原则"
|
||||
fi
|
||||
else
|
||||
echo "❌ Momentry Studio 数据库目录不存在"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 检查 MarkBase 数据库
|
||||
MARKBASE_DB_DIR="${USER_HOME}/markbase/data/users"
|
||||
if [ -d "$MARKBASE_DB_DIR" ]; then
|
||||
echo "MarkBase 数据库目录:"
|
||||
ls -lh "$MARKBASE_DB_DIR"/*.sqlite 2>/dev/null
|
||||
|
||||
echo ""
|
||||
echo "数据库数量: $(ls "$MARKBASE_DB_DIR"/*.sqlite 2>/dev/null | wc -l | tr -d ' ')"
|
||||
echo " ✅ 多个用户数据库,符合'一用户一数据库'原则"
|
||||
else
|
||||
echo "❌ MarkBase 数据库目录不存在"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "2. 检查代码实现"
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
|
||||
# 检查 db.rs 中的 db_path 函数
|
||||
if grep -q 'join("demo.sqlite")' /Users/accusys/momentry_studio/src-tauri/src/db.rs 2>/dev/null; then
|
||||
echo "❌ db.rs 硬编码 demo.sqlite:"
|
||||
grep -n 'join("demo.sqlite")' /Users/accusys/momentry_studio/src-tauri/src/db.rs
|
||||
echo ""
|
||||
echo " 违反了'一用户一数据库'原则"
|
||||
else
|
||||
echo "✅ db.rs 实现动态用户数据库路径"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "3. 检查当前登录用户"
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
|
||||
# 从 localStorage 获取当前用户(需要前端运行)
|
||||
if pgrep -f "momentry-studio\|momentry-proxy" >/dev/null 2>&1; then
|
||||
echo "应用正在运行"
|
||||
echo " ⚠️ 无法直接检查 localStorage,需要手动验证"
|
||||
echo " 建议: 检查前端 localStorage.getItem('username')"
|
||||
else
|
||||
echo "应用未运行"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "================================================================================
|
||||
问题总结
|
||||
================================================================================
|
||||
"
|
||||
|
||||
echo "当前状态:"
|
||||
echo ""
|
||||
echo "Momentry Studio:"
|
||||
if [ -f "$STUDIO_DB_DIR/demo.sqlite" ] && [ $(ls "$STUDIO_DB_DIR"/*.sqlite 2>/dev/null | wc -l) -eq 1 ]; then
|
||||
echo " ❌ 只有 demo.sqlite (硬编码)"
|
||||
echo " ❌ 所有用户共享同一数据库"
|
||||
echo " ❌ 违反'一用户一数据库'原则"
|
||||
else
|
||||
echo " ✅ 多个用户数据库"
|
||||
echo " ✅ 符合设计原则"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "MarkBase Core:"
|
||||
if [ -d "$MARKBASE_DB_DIR" ] && [ $(ls "$MARKBASE_DB_DIR"/*.sqlite 2>/dev/null | wc -l) -gt 1 ]; then
|
||||
echo " ✅ 多个用户数据库"
|
||||
echo " ✅ 符合'一用户一数据库'原则"
|
||||
else
|
||||
echo " ⚠️ 数据库数量不足"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "================================================================================
|
||||
修复建议
|
||||
================================================================================
|
||||
"
|
||||
|
||||
if [ -f "$STUDIO_DB_DIR/demo.sqlite" ] && [ $(ls "$STUDIO_DB_DIR"/*.sqlite 2>/dev/null | wc -l) -eq 1 ]; then
|
||||
echo "需要修复:"
|
||||
echo "1. 修改 db.rs 的 db_path() 函数"
|
||||
echo " - 支持动态用户名"
|
||||
echo " - 从环境变量或函数参数获取"
|
||||
echo ""
|
||||
echo "2. 修改所有数据库函数"
|
||||
echo " - 添加 username 参数"
|
||||
echo " - 或使用环境变量"
|
||||
echo ""
|
||||
echo "3. 修改前端调用"
|
||||
echo " - 传递当前用户名"
|
||||
echo ""
|
||||
echo "详见: docs/USER_DATABASE_ISOLATION_FIX.md"
|
||||
else
|
||||
echo "✅ 当前实现符合设计原则"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "================================================================================
|
||||
"
|
||||
Reference in New Issue
Block a user