mh_goadmin_server/pkg/casbin/mycasbin.go
2023-09-16 10:56:39 +08:00

61 lines
1.2 KiB
Go

package mycasbin
import (
"log"
"github.com/casbin/casbin/v2"
"github.com/casbin/casbin/v2/model"
gormAdapter "github.com/casbin/gorm-adapter/v3"
_ "github.com/go-sql-driver/mysql"
"go-admin/common/global"
)
// Initialize the model from a string.
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 == "*")
`
func Setup() {
Apter, err := gormAdapter.NewAdapterByDBUsePrefix(global.Eloquent, "sys_")
if err != nil {
panic(err)
}
m, err := model.NewModelFromString(text)
if err != nil {
panic(err)
}
e, err := casbin.NewSyncedEnforcer(m, Apter)
if err != nil {
panic(err)
}
err = e.LoadPolicy()
if err != nil {
panic(err)
}
global.CasbinEnforcer = e
}
func Casbin() *casbin.SyncedEnforcer {
return global.CasbinEnforcer
}
func LoadPolicy() (*casbin.SyncedEnforcer, error) {
if err := global.CasbinEnforcer.LoadPolicy(); err == nil {
return global.CasbinEnforcer, err
} else {
log.Printf("casbin rbac_model or policy init error, message: %v \r\n", err.Error())
return nil, err
}
}