Files
OpenClaw Agent 53733b39fc feat: 支持多用户与用户级MCP隔离,优化汇总诊断与UI展示
- 多用户支持:新增 user_mcp_tokens 表,实现按用户 Token 哈希隔离 MCP 查询
- 注册控制:支持 ALLOW_REGISTER 环境变量自适应开关多用户注册
- 前端同步:增加跨账号防脏提交安全拦截,优化登录/注册状态提示
- 汇总页优化:移除合计应得卡片冗余说明,诊断卡片新增「综合时薪诊断」
- 文档更新:同步更新 README.md 关于多用户、MCP 与部署说明
2026-09-14 14:00:07 +08:00

87 lines
3.1 KiB
SQL
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.
-- 工时记账服务端 schema
-- 同时兼容 VPS 上的 node:sqlite 与 Cloudflare D1(都是 SQLite 方言)
-- 设计要点:
-- 1. users.rev 是该用户的单调递增版本号,任何写入都 +1,客户端靠它做增量拉取
-- 2. records / month_adjust 用 deleted 墓碑标记而非物理删除,否则增量同步无法传播「删除」
-- 3. 所有时间戳统一存 ISO 8601 字符串(UTC),避免 D1 与 SQLite 的时间函数差异
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
pw_hash TEXT NOT NULL,
pw_salt TEXT NOT NULL,
pw_iter INTEGER NOT NULL,
rev INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS sessions (
token_hash TEXT PRIMARY KEY,
user_id INTEGER NOT NULL,
created_at TEXT NOT NULL,
expires_at TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_sessions_user ON sessions(user_id);
CREATE INDEX IF NOT EXISTS idx_sessions_exp ON sessions(expires_at);
-- 每日打卡:主键 (user_id, day),day 形如 2026-09-08
CREATE TABLE IF NOT EXISTS records (
user_id INTEGER NOT NULL,
day TEXT NOT NULL,
status TEXT,
shift_type TEXT,
hours REAL,
contraband_found INTEGER NOT NULL DEFAULT 0,
contraband_missed INTEGER NOT NULL DEFAULT 0,
other_penalty REAL,
penalty_reason TEXT,
deleted INTEGER NOT NULL DEFAULT 0,
rev INTEGER NOT NULL,
updated_at TEXT NOT NULL,
PRIMARY KEY (user_id, day)
);
CREATE INDEX IF NOT EXISTS idx_records_rev ON records(user_id, rev);
-- 月度奖惩终稿:主键 (user_id, month),month 形如 2026-09
-- status = draft(草稿,不计入金额) | final(组长审核定稿,计入金额)
CREATE TABLE IF NOT EXISTS month_adjust (
user_id INTEGER NOT NULL,
month TEXT NOT NULL,
status TEXT NOT NULL,
final_amount REAL,
note TEXT,
finalized_at TEXT,
deleted INTEGER NOT NULL DEFAULT 0,
rev INTEGER NOT NULL,
updated_at TEXT NOT NULL,
PRIMARY KEY (user_id, month)
);
CREATE INDEX IF NOT EXISTS idx_adjust_rev ON month_adjust(user_id, rev);
-- 设置整体存一份 JSON:字段会随功能迭代增减,拆列反而不好演进
CREATE TABLE IF NOT EXISTS settings (
user_id INTEGER PRIMARY KEY,
json TEXT NOT NULL,
rev INTEGER NOT NULL,
updated_at TEXT NOT NULL
);
-- App 级键值:服务自身的运行时配置(保留用于全局系统配置)
CREATE TABLE IF NOT EXISTS app_settings (
key TEXT PRIMARY KEY,
value TEXT NOT NULL,
updated_at TEXT NOT NULL
);
-- 用户级 MCP Token 表:支持多用户独立配置 AI 接入令牌
CREATE TABLE IF NOT EXISTS user_mcp_tokens (
user_id INTEGER PRIMARY KEY REFERENCES users(id),
token TEXT NOT NULL,
token_hash TEXT NOT NULL UNIQUE,
enabled INTEGER NOT NULL DEFAULT 1,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_user_mcp_hash ON user_mcp_tokens(token_hash);