feat: add authenticated remote MCP access and complete business workflows
This commit is contained in:
1 parent
f40f4da781
commit
027a8c1b6a
35 files changed
+4430
-183
No files matched your search
@@ -42,6 +42,133 @@ model User {
|
||||
icons Icon[]
|
||||
transfers Transfer[]
|
||||
schedules Schedule[]
|
||||
agentGrants AgentGrant[]
|
||||
agentOperations AgentOperation[]
|
||||
agentAuthorizations AgentAuthorization[]
|
||||
agentPolicy AgentPolicy?
|
||||
agentCalls AgentCall[]
|
||||
}
|
||||
|
||||
/// MCP 调用审计,不保存工具参数、令牌、密码或财务内容
|
||||
model AgentCall {
|
||||
/// 审计记录标识
|
||||
id String @id @default(uuid()) @db.Char(36)
|
||||
/// 可信认证上下文中的用户标识
|
||||
userId String @db.Char(36)
|
||||
/// 所属用户;注销后级联清理
|
||||
user User @relation(fields:[userId],references:[id],onDelete:Cascade)
|
||||
/// 发起调用的连接标识
|
||||
grantId String @db.Char(36)
|
||||
/// 工具名称
|
||||
tool String @db.VarChar(100)
|
||||
/// 结果状态 success 或 error
|
||||
status String @db.VarChar(16)
|
||||
/// 调用完成时间,UTC
|
||||
createdAt DateTime @default(now())
|
||||
@@index([userId,createdAt])
|
||||
}
|
||||
|
||||
/// 用户的 Agent 写入策略
|
||||
model AgentPolicy {
|
||||
/// 所属用户标识,用于数据隔离
|
||||
userId String @id @db.Char(36)
|
||||
user User @relation(fields:[userId],references:[id],onDelete:Cascade)
|
||||
/// 写入策略:readonly 只读、draft 草稿、direct 普通直接写入
|
||||
mode String @default("draft") @db.VarChar(16)
|
||||
}
|
||||
|
||||
/// OAuth 动态注册客户端元数据
|
||||
model AgentClient {
|
||||
/// 唯一标识
|
||||
id String @id @db.Char(36)
|
||||
/// 公开客户端注册元数据,不保存用户凭据
|
||||
metadata Json
|
||||
/// 创建时间,UTC
|
||||
createdAt DateTime @default(now())
|
||||
}
|
||||
|
||||
/// 短期 OAuth 授权请求及一次性授权码摘要
|
||||
model AgentAuthorization {
|
||||
/// 唯一标识
|
||||
id String @id @default(uuid()) @db.Char(36)
|
||||
/// 所属用户标识,用于数据隔离
|
||||
userId String? @db.Char(36)
|
||||
user User? @relation(fields:[userId],references:[id],onDelete:Cascade)
|
||||
/// OAuth 客户端标识;个人令牌为空
|
||||
clientId String @db.Char(36)
|
||||
/// 具体操作参数;禁止保存密码及令牌
|
||||
parameters Json
|
||||
/// 一次性授权码 SHA-256 摘要
|
||||
codeDigest String? @unique @db.Char(64)
|
||||
/// 到期时间,UTC
|
||||
expiresAt DateTime
|
||||
/// 当前处理状态
|
||||
status String @default("pending") @db.VarChar(16)
|
||||
}
|
||||
|
||||
/// 用户授权连接、令牌摘要及资源权限
|
||||
model AgentGrant {
|
||||
/// 唯一标识
|
||||
id String @id @default(uuid()) @db.Char(36)
|
||||
/// 所属用户标识,用于数据隔离
|
||||
userId String @db.Char(36)
|
||||
user User @relation(fields:[userId],references:[id],onDelete:Cascade)
|
||||
/// OAuth 客户端标识;个人令牌为空
|
||||
clientId String? @db.Char(36)
|
||||
/// 用户可见连接名称
|
||||
name String @db.VarChar(100)
|
||||
/// 权限列表:read、draft、write、sensitive
|
||||
scopes Json
|
||||
/// 令牌适用的规范 MCP 资源地址
|
||||
resource String @db.VarChar(500)
|
||||
/// 访问令牌 SHA-256 摘要;完整值仅颁发时返回
|
||||
accessDigest String @unique @db.Char(64)
|
||||
/// 刷新令牌 SHA-256 摘要,使用后轮换
|
||||
refreshDigest String? @unique @db.Char(64)
|
||||
/// 到期时间,UTC
|
||||
expiresAt DateTime
|
||||
/// 刷新授权到期时间,UTC
|
||||
refreshExpiresAt DateTime?
|
||||
/// 撤销时间,UTC;空表示未撤销
|
||||
revokedAt DateTime?
|
||||
/// 本连接的独立业务授权会话标识,不作为 MCP 凭证
|
||||
sessionId String @db.Char(64)
|
||||
/// 创建时间,UTC
|
||||
createdAt DateTime @default(now())
|
||||
@@index([userId,createdAt])
|
||||
}
|
||||
|
||||
/// Agent 写入草稿、幂等记录及提交结果
|
||||
model AgentOperation {
|
||||
/// 唯一标识
|
||||
id String @id @default(uuid()) @db.Char(36)
|
||||
/// 所属用户标识,用于数据隔离
|
||||
userId String @db.Char(36)
|
||||
user User @relation(fields:[userId],references:[id],onDelete:Cascade)
|
||||
/// 发起操作的授权连接标识
|
||||
grantId String @db.Char(36)
|
||||
/// 同用户唯一的客户端幂等键
|
||||
key String @db.VarChar(128)
|
||||
/// 工具和参数的规范摘要;拒绝同键不同参数
|
||||
hash String @db.Char(64)
|
||||
/// 业务工具名称
|
||||
tool String @db.VarChar(100)
|
||||
/// 具体操作参数;禁止保存密码及令牌
|
||||
parameters Json
|
||||
/// 确认前的账目版本摘要,防止覆盖并发修改
|
||||
snapshot String @db.Char(64)
|
||||
/// 当前处理状态
|
||||
status String @default("pending") @db.VarChar(16)
|
||||
/// 到期时间,UTC
|
||||
expiresAt DateTime
|
||||
/// 结构化操作结果或最近提交失败原因
|
||||
result Json?
|
||||
/// 创建时间,UTC
|
||||
createdAt DateTime @default(now())
|
||||
/// 完成或取消时间,UTC
|
||||
completedAt DateTime?
|
||||
@@unique([userId,key])
|
||||
@@index([userId,createdAt])
|
||||
}
|
||||
/// 登录会话与隐藏项目查看授权
|
||||
model Session {
|
||||
|
||||
Reference in new issue
Block a user