修复 goframe 配置读写分离后,获取不到数据库链接

This commit is contained in:
vlong 2025-07-10 18:18:10 +08:00
parent 6fcfa61dff
commit 6da8cafb6f

View File

@ -16,6 +16,7 @@ import (
"github.com/casbin/casbin/v2" "github.com/casbin/casbin/v2"
"github.com/casbin/casbin/v2/model" "github.com/casbin/casbin/v2/model"
_ "github.com/gogf/gf/contrib/drivers/mysql/v2" _ "github.com/gogf/gf/contrib/drivers/mysql/v2"
"github.com/gogf/gf/v2/container/gvar"
"github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gfile" "github.com/gogf/gf/v2/os/gfile"
"github.com/gogf/gf/v2/os/gres" "github.com/gogf/gf/v2/os/gres"
@ -35,7 +36,7 @@ var Enforcer *casbin.Enforcer
// InitEnforcer 初始化 // InitEnforcer 初始化
func InitEnforcer(ctx context.Context) { func InitEnforcer(ctx context.Context) {
var ( var (
link = g.Cfg().MustGet(ctx, "database.default.link") link = getDbLink(ctx)
a, err = NewAdapter(link.String()) a, err = NewAdapter(link.String())
) )
@ -70,6 +71,26 @@ func InitEnforcer(ctx context.Context) {
loadPermissions(ctx) loadPermissions(ctx)
} }
// GetDbLink 获取数据库链接
func getDbLink(ctx context.Context) *gvar.Var {
link := g.Cfg().MustGet(ctx, "database.default")
//读写分离
if !link.IsSlice() {
return g.Cfg().MustGet(ctx, "database.default.link")
}
for _, v := range link.Array() {
// 只获取主库
val := v.(map[string]interface{})
if val["role"] == "master" {
return gvar.New(val["link"])
}
}
return gvar.New("database.default.0.link")
}
func loadPermissions(ctx context.Context) { func loadPermissions(ctx context.Context) {
type Policy struct { type Policy struct {
Key string `json:"key"` Key string `json:"key"`