#!/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 "================================================================================ "