| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- package mycasbin
- import (
- gormAdapter "IotAdmin/core/gorm-adapter"
- "IotAdmin/core/logger"
- redisWatcher "IotAdmin/core/redis-watcher"
- "IotAdmin/core/sdk"
- "IotAdmin/core/sdk/config"
- "sync"
- "github.com/casbin/casbin/v2"
- "github.com/casbin/casbin/v2/log"
- "github.com/casbin/casbin/v2/model"
- "github.com/redis/go-redis/v9"
- "gorm.io/gorm"
- )
- var text = `
- [request_definition]
- r = sub, obj, act
- [policy_definition]
- p = sub, obj, act
- [policy_effect]
- e = some(where (p.eft == allow))
- [matchers]
- m = r.sub == p.sub && (keyMatch2(r.obj, p.obj) || keyMatch(r.obj, p.obj)) && (r.act == p.act || p.act == "*")
- `
- var (
- enforcer *casbin.SyncedEnforcer
- once sync.Once
- )
- func Setup(db *gorm.DB, _ string) *casbin.SyncedEnforcer {
- once.Do(func() {
- adapter, err := gormAdapter.NewAdapterByDBUseTableName(db, "sys", "casbin_rule")
- if err != nil && err.Error() != "invalid DDL" {
- panic(err)
- }
- m, err := model.NewModelFromString(text)
- if err != nil {
- panic(err)
- }
- enforcer, err = casbin.NewSyncedEnforcer(m, adapter)
- if err != nil {
- panic(err)
- }
- err = enforcer.LoadPolicy()
- if err != nil {
- panic(err)
- }
- // set redis watcher if redis config is not nil
- if config.CacheConfig.Redis != nil {
- w, err := redisWatcher.NewWatcher(config.CacheConfig.Redis.Addr, redisWatcher.WatcherOptions{
- Options: redis.Options{
- Network: "tcp",
- Password: config.CacheConfig.Redis.Password,
- },
- Channel: "/casbin",
- IgnoreSelf: false,
- })
- if err != nil {
- panic(err)
- }
- err = w.SetUpdateCallback(updateCallback)
- if err != nil {
- panic(err)
- }
- err = enforcer.SetWatcher(w)
- if err != nil {
- panic(err)
- }
- }
- log.SetLogger(&CasbinLogger{})
- enforcer.EnableLog(true)
- })
- return enforcer
- }
- func updateCallback(msg string) {
- l := logger.NewHelper(sdk.Runtime.GetLogger())
- l.Infof("casbin updateCallback msg: %v", msg)
- err := enforcer.LoadPolicy()
- if err != nil {
- l.Errorf("casbin LoadPolicy err: %v", err)
- }
- }
|