AI Gateway Go 0.10.0 源码快照 + 旗舰版需求规划报告

M0-M7 已完成:核心网关(身份/RBAC/TOTP/OIDC/SAML/Provider/配额/路由/内容策略/审计/定价)+ 资源市场(MCP/Skills/数字员工)。
含 22 个 PostgreSQL 迁移、管理端/门户端前端源码、OpenAPI 契约、部署 compose。

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
ben
2026-08-12 11:45:54 +08:00
commit 5759c1862e
807 changed files with 114727 additions and 0 deletions
+162
View File
@@ -0,0 +1,162 @@
import request from '@/utils/http'
export type IdentityKind = 'admin' | 'portal'
export interface IdentityRecord {
id: string
kind: IdentityKind
login: string
display_name: string
role: string
permissions: string[]
effective_permissions: string[]
active: boolean
auth_source: string
totp_enabled: boolean
locked_until?: string
created_at: string
updated_at: string
department_id?: string
department_name?: string
}
export interface IdentityInput {
login: string
display_name: string
role: string
password?: string
permissions: string[]
active: boolean
department_id?: string
}
export interface DepartmentRecord {
id: string
code: string
name: string
description: string
parent_id?: string
parent_name?: string
active: boolean
user_count: number
created_at: string
updated_at: string
}
export interface DepartmentInput {
code: string
name: string
description: string
parent_id?: string
active: boolean
}
export interface IdentityProviderRecord {
id: string
code: string
display_name: string
issuer_url: string
client_id: string
secret_configured: boolean
redirect_uri: string
portal_return_url: string
scopes: string[]
auto_provision: boolean
default_department_id?: string
enabled: boolean
revision: number
credential_kek_version: number
}
export interface IdentityProviderInput {
code: string
display_name: string
issuer_url: string
client_id: string
client_secret?: string
redirect_uri: string
portal_return_url: string
scopes: string[]
auto_provision: boolean
default_department_id?: string
enabled: boolean
}
export interface SAMLProviderRecord {
id: string
kind: 'saml'
code: string
display_name: string
metadata_url: string
sp_entity_id: string
acs_url: string
portal_return_url: string
email_attribute: string
name_attribute: string
auto_provision: boolean
default_department_id?: string
enabled: boolean
revision: number
}
export type SAMLProviderInput = Omit<SAMLProviderRecord, 'id' | 'kind' | 'revision'>
function resource(kind: IdentityKind) {
return kind === 'admin' ? 'admins' : 'portal-users'
}
export function fetchIdentities(kind: IdentityKind) {
return request.get<IdentityRecord[]>({
url: `/api/v1/admin/identities/${resource(kind)}`
})
}
export function createIdentity(kind: IdentityKind, data: IdentityInput) {
return request.post<IdentityRecord>({
url: `/api/v1/admin/identities/${resource(kind)}`,
params: data
})
}
export function updateIdentity(kind: IdentityKind, id: string, data: IdentityInput) {
return request.put<IdentityRecord>({
url: `/api/v1/admin/identities/${resource(kind)}/${id}`,
params: data
})
}
export function fetchDepartments() {
return request.get<DepartmentRecord[]>({ url: '/api/v1/admin/departments' })
}
export function createDepartment(data: DepartmentInput) {
return request.post<DepartmentRecord>({ url: '/api/v1/admin/departments', params: data })
}
export function updateDepartment(id: string, data: DepartmentInput) {
return request.put<DepartmentRecord>({ url: `/api/v1/admin/departments/${id}`, params: data })
}
export function fetchIdentityProviders() {
return request.get<IdentityProviderRecord[]>({ url: '/api/v1/admin/identity-providers' })
}
export function createIdentityProvider(data: IdentityProviderInput) {
return request.post<IdentityProviderRecord>({ url: '/api/v1/admin/identity-providers', params: data })
}
export function updateIdentityProvider(id: string, data: IdentityProviderInput) {
return request.put<IdentityProviderRecord>({ url: `/api/v1/admin/identity-providers/${id}`, params: data })
}
export function fetchSAMLProviders() {
return request.get<SAMLProviderRecord[]>({ url: '/api/v1/admin/saml-providers' })
}
export function createSAMLProvider(data: SAMLProviderInput) {
return request.post<SAMLProviderRecord>({ url: '/api/v1/admin/saml-providers', params: data })
}
export function updateSAMLProvider(id: string, data: SAMLProviderInput) {
return request.put<SAMLProviderRecord>({ url: `/api/v1/admin/saml-providers/${id}`, params: data })
}