qwen_agent/migrations/add_end_user_and_bot_share_tokens.sql
朱潮 680dd02595 新增对外客户访问体系:share token + end-user 账号
- migrations: 加 agent_user.is_end_user 列、新建 agent_bot_share_tokens 表
- routes/bot_share: share token CRUD、客户账号 CRUD、公开 bot-share 信息接口
- routes/bot_manager: 登录/校验响应带 is_end_user,客户账号跳过 New API 同步
- routes/chat: /api/v3/chat/completions 增加 share_token 与 bot_id 一致性校验
- utils/api_models: ChatRequestV3 加 share_token 字段
- fastapi_app: 注册 bot_share router
2026-06-26 14:10:43 +08:00

43 lines
2.1 KiB
SQL
Raw 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.

-- ============================================================
-- End-user & Bot Share Token Migration
-- 1. agent_user 增加 is_end_user 列(区分对外客户账号)
-- 2. 新增 agent_bot_share_tokens 表(一次性可吊销的 bot 对外访问凭证)
-- 注意:现有 bot_shares 表是 admin 之间的协作分享viewer/editor
-- 与本次"对外客户访问"语义无关,故新表另起名字避免冲突。
-- ============================================================
-- 1. agent_user 增加 is_end_user
ALTER TABLE agent_user
ADD COLUMN IF NOT EXISTS is_end_user BOOLEAN DEFAULT FALSE;
CREATE INDEX IF NOT EXISTS idx_agent_user_is_end_user
ON agent_user(is_end_user) WHERE is_end_user = TRUE;
COMMENT ON COLUMN agent_user.is_end_user IS '是否为对外客户账号(不可登录 admin 后台,仅能通过 share token 访问指定 bot';
-- 2. agent_bot_share_tokens 表
CREATE TABLE IF NOT EXISTS agent_bot_share_tokens (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
bot_id UUID NOT NULL REFERENCES agent_bots(id) ON DELETE CASCADE,
share_token VARCHAR(64) NOT NULL UNIQUE,
name VARCHAR(255),
created_by UUID NOT NULL REFERENCES agent_user(id) ON DELETE CASCADE,
expires_at TIMESTAMP WITH TIME ZONE,
revoked_at TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_agent_bot_share_tokens_token
ON agent_bot_share_tokens(share_token);
CREATE INDEX IF NOT EXISTS idx_agent_bot_share_tokens_bot_id
ON agent_bot_share_tokens(bot_id);
CREATE INDEX IF NOT EXISTS idx_agent_bot_share_tokens_created_by
ON agent_bot_share_tokens(created_by);
COMMENT ON TABLE agent_bot_share_tokens IS 'bot 对外访问凭证bot 主人生成 share_token客户带 token 登录后访问对应 bot';
COMMENT ON COLUMN agent_bot_share_tokens.share_token IS '随机字符串,作为 URL path 的一部分';
COMMENT ON COLUMN agent_bot_share_tokens.expires_at IS '过期时间NULL 表示永不过期,除非被吊销)';
COMMENT ON COLUMN agent_bot_share_tokens.revoked_at IS '吊销时间(非 NULL 表示已吊销)';