From 1b447b7b0bfa236cc08ee90f3375d862e94bc5b3 Mon Sep 17 00:00:00 2001 From: npc0-hue Date: Fri, 6 Mar 2026 12:50:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20admin=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E6=9C=89=E8=AF=AF=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/server/api/v1/system/sys_initdb.go | 15 +++---- admin/server/config.yaml | 2 +- admin/server/initialize/gorm.go | 52 ++++++++++++++++++++++- admin/server/service/system/sys_initdb.go | 20 ++++++++- api/services/account_service.py | 14 ++++++ docker/docker-compose.dify-plus.yaml | 2 +- 6 files changed, 93 insertions(+), 12 deletions(-) diff --git a/admin/server/api/v1/system/sys_initdb.go b/admin/server/api/v1/system/sys_initdb.go index f8ad8263b..4081efada 100644 --- a/admin/server/api/v1/system/sys_initdb.go +++ b/admin/server/api/v1/system/sys_initdb.go @@ -5,9 +5,8 @@ import ( "github.com/flipped-aurora/gin-vue-admin/server/model/common/response" "github.com/flipped-aurora/gin-vue-admin/server/model/system/request" "github.com/flipped-aurora/gin-vue-admin/server/service/system" - "go.uber.org/zap" - "github.com/gin-gonic/gin" + "go.uber.org/zap" ) type DBApi struct{} @@ -20,7 +19,8 @@ type DBApi struct{} // @Success 200 {object} response.Response{data=string} "初始化用户数据库" // @Router /init/initdb [post] func (i *DBApi) InitDB(c *gin.Context) { - if global.GVA_DB != nil { + + if !initDBService.IfInit() { global.GVA_LOG.Error("已存在数据库配置!") response.FailWithMessage("已存在数据库配置", c) return @@ -51,12 +51,11 @@ func (i *DBApi) InitDB(c *gin.Context) { // @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "初始化用户数据库" // @Router /init/checkdb [post] func (i *DBApi) CheckDB(c *gin.Context) { - var ( - message = "前往初始化数据库" - needInit = true - ) + // init + var needInit = true + var message = "前往初始化数据库" - if global.GVA_DB != nil { + if initDBService.IfInit() { message = "数据库无需初始化" needInit = false } diff --git a/admin/server/config.yaml b/admin/server/config.yaml index ecb06db90..ac71001a8 100644 --- a/admin/server/config.yaml +++ b/admin/server/config.yaml @@ -152,7 +152,7 @@ pgsql: db-name: dify username: postgres password: difyai123456 - path: 127.0.0.1 + path: 127.0.0.01 engine: "" log-mode: error max-idle-conns: 10 diff --git a/admin/server/initialize/gorm.go b/admin/server/initialize/gorm.go index de707f7da..462a5701a 100644 --- a/admin/server/initialize/gorm.go +++ b/admin/server/initialize/gorm.go @@ -81,8 +81,58 @@ func Gorm() *gorm.DB { } func RegisterTables(db *gorm.DB) { + var err error + var count int64 + var menu system.SysBaseMenuBtn + var authority system.SysAuthority + if err = global.GVA_DB.Model(&menu).Count(&count).Error; count == 0 { + if err = global.GVA_DB.Model(&authority).Count(&count).Error; count == 1 { + return + } + } + // auto + err = db.AutoMigrate( + system.SysApi{}, + system.SysIgnoreApi{}, + system.SysUser{}, + system.SysBaseMenu{}, + system.JwtBlacklist{}, + system.SysAuthority{}, + system.SysDictionary{}, + system.SysOperationRecord{}, + system.SysAutoCodeHistory{}, + system.SysDictionaryDetail{}, + system.SysBaseMenuParameter{}, + system.SysBaseMenuBtn{}, + system.SysAuthorityBtn{}, + system.SysAutoCodePackage{}, + system.SysExportTemplate{}, + system.Condition{}, + system.JoinTemplate{}, + system.SysParams{}, - err := db.AutoMigrate(tables) + example.ExaFile{}, + example.ExaCustomer{}, + example.ExaFileChunk{}, + example.ExaFileUploadAndDownload{}, + + adapter.CasbinRule{}, + + // Extend gaia model + gaia.AccountDingTalkExtend{}, + gaia.AppRequestTestBatch{}, + gaia.AppRequestTest{}, + gaia.SystemIntegration{}, // Extend System Integration + gaia.ForwardingExtend{}, // Extend Forwarding Extend + gaia.BatchWorkflow{}, // Extend Batch Workflow + gaia.BatchWorkflowTask{}, // Extend Batch Workflow Task + gaia.AppVersionConfig{}, // 应用版本全局配置(Token) + gaia.AppVersionRelease{}, // 应用版本发布 + gaia.AppVersionDownload{}, // 应用版本各平台安装包 + gaia.ModelProviderConfig{}, // 模型提供商配置 + gaia.ModelProxyLog{}, // 模型中转请求日志 + system.SysUserGlobalCode{}, // Extend Global Code + ) if err != nil { global.GVA_LOG.Error("register table failed", zap.Error(err)) diff --git a/admin/server/service/system/sys_initdb.go b/admin/server/service/system/sys_initdb.go index eac74a09d..4aa040b76 100644 --- a/admin/server/service/system/sys_initdb.go +++ b/admin/server/service/system/sys_initdb.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "github.com/flipped-aurora/gin-vue-admin/server/global" + modelSystem "github.com/flipped-aurora/gin-vue-admin/server/model/system" "github.com/flipped-aurora/gin-vue-admin/server/model/system/request" "gorm.io/gorm" "sort" @@ -86,6 +87,22 @@ func RegisterInit(order int, i SubInitializer) { type InitDBService struct{} +// IfInit 判断是否数据库初始化了 +func (initDBService *InitDBService) IfInit() (init bool) { + var menuCount, authorityCount int64 + if global.GVA_DB != nil { + init = true + var menu modelSystem.SysBaseMenuBtn + var authority modelSystem.SysAuthority + global.GVA_DB.Model(&menu).Count(&menuCount) + global.GVA_DB.Model(&authority).Count(&authorityCount) + if menuCount == 0 && authorityCount == 1 { + init = false + } + } + return init +} + // InitDB 创建数据库并初始化 总入口 func (initDBService *InitDBService) InitDB(conf request.InitDB) (err error) { ctx := context.TODO() @@ -122,7 +139,8 @@ func (initDBService *InitDBService) InitDB(conf request.InitDB) (err error) { db := ctx.Value("db").(*gorm.DB) global.GVA_DB = db - + db.Exec("DELETE FROM sys_base_menus") + db.Exec("DELETE FROM sys_authorities") if err = initHandler.InitTables(ctx, initializers); err != nil { return err } diff --git a/api/services/account_service.py b/api/services/account_service.py index d14963e35..609403a7d 100644 --- a/api/services/account_service.py +++ b/api/services/account_service.py @@ -35,6 +35,7 @@ from models.account import ( ) from models.account_money_extend import AccountMoneyExtend from models.model import DifySetup +from services.account_service_extend import TenantExtendService from services.billing_service import BillingService from services.errors.account import ( AccountAlreadyInTenantError, @@ -1313,6 +1314,19 @@ class RegisterService: TenantService.create_owner_tenant_if_not_exist(account=account, is_setup=True) + # extend begin: admin 初始化不同步问题 - 在 dify 初始化完成后,自动调用 admin 初始化 + # 将 setup 用户加入到第一个工作区(admin 租户),确保后续用户信息同步时权限正确 + tenant_extend_service = TenantExtendService + super_admin_id = tenant_extend_service.get_super_admin_id().id + super_admin_tenant_id = tenant_extend_service.get_super_admin_tenant_id().id + if super_admin_id and super_admin_tenant_id: + is_create = TenantExtendService.create_default_tenant_member_if_not_exist( + super_admin_tenant_id, account.id + ) + if is_create: + TenantService.switch_tenant(account, super_admin_tenant_id) + # extend end: admin 初始化不同步问题 + dify_setup = DifySetup(version=dify_config.project.version) db.session.add(dify_setup) db.session.commit() diff --git a/docker/docker-compose.dify-plus.yaml b/docker/docker-compose.dify-plus.yaml index fe6834ede..b74bbd5d9 100644 --- a/docker/docker-compose.dify-plus.yaml +++ b/docker/docker-compose.dify-plus.yaml @@ -1679,7 +1679,7 @@ services: # Extend - admin-server admin-server: - image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-admin-server:1.12.1 + image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-admin-server:1.12.1.fex.1 restart: always environment: # JWT signing key must match API's SECRET_KEY for token compatibility