ldap-1-backend/public/common/casbin.go

63 lines
1.1 KiB
Go
Raw Permalink Normal View History

2022-05-18 17:57:03 +08:00
package common
import (
"fmt"
"github.com/casbin/casbin/v2"
"github.com/casbin/casbin/v2/model"
2022-05-18 17:57:03 +08:00
gormadapter "github.com/casbin/gorm-adapter/v3"
)
// 全局CasbinEnforcer
var CasbinEnforcer *casbin.Enforcer
// 初始化casbin策略管理器
func InitCasbinEnforcer() {
e, err := mysqlCasbin()
if err != nil {
Log.Panicf("初始化Casbin失败%v", err)
panic(fmt.Sprintf("初始化Casbin失败%v", err))
}
CasbinEnforcer = e
Log.Info("初始化Casbin完成!")
}
var casbinModel = `
[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) || keyMatch(r.obj, p.obj)) && (r.act == p.act || p.act == "*")
`
2022-05-18 17:57:03 +08:00
func mysqlCasbin() (*casbin.Enforcer, error) {
a, err := gormadapter.NewAdapterByDB(DB)
if err != nil {
return nil, err
}
m, err := model.NewModelFromString(casbinModel)
if err != nil {
return nil, err
}
e, err := casbin.NewEnforcer(m, a)
2022-05-18 17:57:03 +08:00
if err != nil {
return nil, err
}
err = e.LoadPolicy()
if err != nil {
return nil, err
}
return e, nil
}