package casbin import ( "strings" "github.com/casbin/casbin/v2" "github.com/casbin/casbin/v2/model" gormadapter "github.com/casbin/gorm-adapter/v3" "gorm.io/driver/mysql" "gorm.io/gorm" ) const modelText = ` [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 = g(r.sub, p.sub) && keyMatch2(r.obj, p.obj) && (r.act == p.act || p.act == "*") ` func NewEnforcer(dsn string) (*casbin.Enforcer, error) { db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { return nil, err } adapter, err := gormadapter.NewAdapterByDB(db) if err != nil { return nil, err } m, err := model.NewModelFromString(modelText) if err != nil { return nil, err } enforcer, err := casbin.NewEnforcer(m, adapter) if err != nil { return nil, err } if err := enforcer.LoadPolicy(); err != nil { return nil, err } return enforcer, nil } func CheckPermission(enforcer *casbin.Enforcer, roleKey, path, method string) bool { method = strings.ToUpper(method) ok, err := enforcer.Enforce(roleKey, path, method) if err != nil { return false } return ok }