feat: add tenant-scoped rule and permission management

This commit is contained in:
wren
2026-05-21 22:03:08 +08:00
parent a2c2bf1969
commit 1f1bccf3b3
193 changed files with 64463 additions and 1771 deletions
+151
View File
@@ -0,0 +1,151 @@
#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<'USAGE'
用法:
scripts/run_rag_public_orphan_defaults_migration.sh [连接参数] [--migrate --yes]
连接方式二选一:
1. 使用 DATABASE_URL:
DATABASE_URL='postgresql://user:password@host:5432/dbname' scripts/run_rag_public_orphan_defaults_migration.sh
2. 使用 psql 参数:
scripts/run_rag_public_orphan_defaults_migration.sh -h <host> -U <user> -d <db_name> [-p <port>]
默认行为:
只执行迁移前检查,不修改数据库。
执行迁移:
先确认 precheck 输出符合预期,再追加 --migrate --yes:
scripts/run_rag_public_orphan_defaults_migration.sh -h <host> -U <user> -d <db_name> --migrate --yes
环境变量:
PGPASSWORD 可用于非交互输入数据库密码。
USAGE
}
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
PRECHECK_SQL="${REPO_ROOT}/scripts/创建sql/precheck_rag_public_orphan_defaults.sql"
MIGRATE_SQL="${REPO_ROOT}/scripts/创建sql/migrate_rag_public_orphan_defaults.sql"
LOG_DIR="${REPO_ROOT}/logs/rag-public-orphan-defaults"
PSQL_ARGS=()
RUN_MIGRATION=false
CONFIRMED=false
while [[ $# -gt 0 ]]; do
case "$1" in
-h|--host)
[[ $# -ge 2 ]] || { echo "缺少 $1 的值" >&2; exit 2; }
PSQL_ARGS+=("-h" "$2")
shift 2
;;
-U|--username)
[[ $# -ge 2 ]] || { echo "缺少 $1 的值" >&2; exit 2; }
PSQL_ARGS+=("-U" "$2")
shift 2
;;
-d|--dbname)
[[ $# -ge 2 ]] || { echo "缺少 $1 的值" >&2; exit 2; }
PSQL_ARGS+=("-d" "$2")
shift 2
;;
-p|--port)
[[ $# -ge 2 ]] || { echo "缺少 $1 的值" >&2; exit 2; }
PSQL_ARGS+=("-p" "$2")
shift 2
;;
--migrate)
RUN_MIGRATION=true
shift
;;
--yes)
CONFIRMED=true
shift
;;
--help)
usage
exit 0
;;
*)
echo "未知参数: $1" >&2
usage
exit 2
;;
esac
done
if ! command -v psql >/dev/null 2>&1; then
echo "未找到 psql,请先安装 PostgreSQL client。" >&2
exit 1
fi
if [[ ! -f "${PRECHECK_SQL}" ]]; then
echo "找不到预检查 SQL: ${PRECHECK_SQL}" >&2
exit 1
fi
if [[ ! -f "${MIGRATE_SQL}" ]]; then
echo "找不到迁移 SQL: ${MIGRATE_SQL}" >&2
exit 1
fi
if [[ -n "${DATABASE_URL:-}" && ${#PSQL_ARGS[@]} -gt 0 ]]; then
echo "请不要同时使用 DATABASE_URL 和 -h/-U/-d 参数。" >&2
exit 2
fi
if [[ -z "${DATABASE_URL:-}" && ${#PSQL_ARGS[@]} -eq 0 ]]; then
echo "缺少数据库连接参数。请设置 DATABASE_URL,或传入 -h/-U/-d。" >&2
usage
exit 2
fi
if [[ "${RUN_MIGRATION}" == true && "${CONFIRMED}" != true ]]; then
echo "迁移会修改数据库。请先检查 precheck 输出,确认后追加 --yes。" >&2
exit 2
fi
mkdir -p "${LOG_DIR}"
TIMESTAMP="$(date +%Y%m%d-%H%M%S)"
PRECHECK_LOG="${LOG_DIR}/precheck-${TIMESTAMP}.log"
MIGRATE_LOG="${LOG_DIR}/migrate-${TIMESTAMP}.log"
run_psql_file() {
local sql_file="$1"
local log_file="$2"
if [[ -n "${DATABASE_URL:-}" ]]; then
psql "${DATABASE_URL}" -v ON_ERROR_STOP=1 -f "${sql_file}" 2>&1 | tee "${log_file}"
else
psql "${PSQL_ARGS[@]}" -v ON_ERROR_STOP=1 -f "${sql_file}" 2>&1 | tee "${log_file}"
fi
}
echo "开始执行 RAG 公共知识库未归属默认项预检查..."
echo "预检查输出: ${PRECHECK_LOG}"
run_psql_file "${PRECHECK_SQL}" "${PRECHECK_LOG}"
if [[ "${RUN_MIGRATION}" != true ]]; then
cat <<EOF
预检查已完成,未执行迁移。
请确认上方第 1 段候选只包含需要从“未分配地区”迁到“公共”的历史公共知识库。
确认后执行同一命令并追加: --migrate --yes
EOF
exit 0
fi
echo
echo "开始执行迁移..."
echo "迁移输出: ${MIGRATE_LOG}"
run_psql_file "${MIGRATE_SQL}" "${MIGRATE_LOG}"
cat <<EOF
迁移脚本已执行完成。
请检查迁移输出中的 public_default_count,应为 1。
然后刷新 /chat-with-llm/dataset-manager,原“未分配地区”的默认项应归入“公共”,并且非默认项可以删除。
EOF