Files
momentry_studio/scripts/check_user_isolation.sh
Momentry Studio 08584ecc87 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 - 检查脚本
2026-10-12 14:50:34 +08:00

127 lines
4.3 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 "================================================================================
"