fix: Z35 禁止用中文昵称作 Postgres 库名,发布时纠正脏数据
绑定 database_name 改为 user_{id};publish 遇非法库名 Sanitize 并回写,避免 EnsureDatabase 400。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -7,9 +7,10 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"aijianzhan/platform/internal/agentcap"
|
||||
"aijianzhan/platform/internal/agentstore"
|
||||
"aijianzhan/platform/internal/audit"
|
||||
"aijianzhan/platform/internal/authx"
|
||||
"aijianzhan/platform/internal/agentcap"
|
||||
"aijianzhan/platform/internal/blueprint"
|
||||
"aijianzhan/platform/internal/meta"
|
||||
"aijianzhan/platform/internal/schema"
|
||||
@@ -264,16 +265,26 @@ func (l *PublishLogic) Publish(slug string, req *types.PublishReq) (*types.Publi
|
||||
|
||||
schemaName := bp.AssignSchemaName(tenantID)
|
||||
dbName := bp.AssignDatabaseName(tenantID)
|
||||
// Z8c:智能体若绑定了 database_name,新建模块优先落到该库(database_per_app)
|
||||
// Z8c:智能体若绑定了合法 database_name,新建模块优先落到该库(database_per_app)
|
||||
// Z35:中文昵称等非法名不得用于 EnsureDatabase,回落 AssignDatabaseName
|
||||
if authx.Role(l.ctx) == authx.RoleAgent && l.svcCtx.Agents != nil {
|
||||
if aid := authx.AgentID(l.ctx); aid > 0 {
|
||||
if acc, err := l.svcCtx.Agents.Get(l.ctx, tenantID, aid); err == nil && acc != nil {
|
||||
if dn := strings.TrimSpace(acc.DatabaseName); dn != "" {
|
||||
if dn := strings.TrimSpace(acc.DatabaseName); dn != "" && schema.ValidDBName(dn) {
|
||||
if !exists || existing.DatabaseName == "" {
|
||||
bp.Storage.Mode = "database_per_app"
|
||||
schemaName = bp.AssignSchemaName(tenantID)
|
||||
dbName = dn
|
||||
}
|
||||
} else if dn != "" && !schema.ValidDBName(dn) {
|
||||
// 历史脏数据(如 DisplayName 当库名):纠正智能体落点库名,避免反复 400
|
||||
safeName := schema.SanitizeDBName(tenantID, slug)
|
||||
_, _ = l.svcCtx.Agents.Update(l.ctx, tenantID, aid, agentstore.UpdateInput{
|
||||
DatabaseName: &safeName,
|
||||
})
|
||||
bp.Storage.Mode = "database_per_app"
|
||||
schemaName = bp.AssignSchemaName(tenantID)
|
||||
dbName = safeName
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -294,7 +305,7 @@ func (l *PublishLogic) Publish(slug string, req *types.PublishReq) (*types.Publi
|
||||
schemaName = existing.SchemaName
|
||||
bp.Storage.SchemaName = existing.SchemaName
|
||||
}
|
||||
if existing.DatabaseName != "" {
|
||||
if existing.DatabaseName != "" && schema.ValidDBName(existing.DatabaseName) {
|
||||
dbName = existing.DatabaseName
|
||||
}
|
||||
ddl, err = schema.BuildPostgresDDL(bp)
|
||||
|
||||
Reference in New Issue
Block a user