缺少事务可能出现数据不一致风险 (#1575)

Co-authored-by: zongqiang <zongq@rp-pet.cn>
This commit is contained in:
ZongQiang
2023-11-18 22:20:26 +08:00
committed by GitHub
co-authored by zongqiang
parent aa6ca95f13
commit 5ef0e43312
4 changed files with 165 additions and 56 deletions
+46
View File
@@ -2,6 +2,7 @@ package system
import (
"errors"
"gorm.io/gorm"
"strconv"
"sync"
@@ -139,3 +140,48 @@ func (casbinService *CasbinService) Casbin() *casbin.SyncedCachedEnforcer {
})
return syncedCachedEnforcer
}
func (casbinService *CasbinService) CasbinWithDB(db *gorm.DB) (*casbin.SyncedEnforcer, error) {
var a *gormadapter.Adapter
var m model.Model
var s *casbin.SyncedEnforcer
var err error
var text = `
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = r.sub == p.sub && keyMatch2(r.obj,p.obj) && r.act == p.act
`
if a, err = gormadapter.NewAdapterByDB(db); err != nil {
zap.L().Error("适配数据库失败请检查casbin表是否为InnoDB引擎!", zap.Error(err))
return nil, err
}
if m, err = model.NewModelFromString(text); err != nil {
zap.L().Error("字符串加载模型失败!", zap.Error(err))
return nil, err
}
if s, err = casbin.NewSyncedEnforcer(m, a); err != nil {
zap.L().Error("通过文件或 DB 创建执行器失败!", zap.Error(err))
return nil, err
}
if err = s.LoadPolicy(); err != nil {
zap.L().Error("从持久层中加载policy规则失败!", zap.Error(err))
return nil, err
}
return s, nil
}