- 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
43 lines
2.1 KiB
SQL
43 lines
2.1 KiB
SQL
-- ============================================================
|
||
-- 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 表示已吊销)';
|