package database import ( "github.com/casbin/casbin/v2" "github.com/casbin/casbin/v2/model" gormadapter "github.com/casbin/gorm-adapter/v3" "gorm.io/gorm" ) const casbinModel = ` [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 setupCasbin(db *gorm.DB) (*casbin.SyncedEnforcer, error) { // Schema changes are migration-owned. The adapter must not create or alter tables. gormadapter.TurnOffAutoMigrate(db) adapter, err := gormadapter.NewAdapterByDBUseTableName(db, "sys", "casbin_rule") if err != nil { return nil, err } policyModel, err := model.NewModelFromString(casbinModel) if err != nil { return nil, err } enforcer, err := casbin.NewSyncedEnforcer(policyModel, adapter) if err != nil { return nil, err } if err := enforcer.LoadPolicy(); err != nil { return nil, err } return enforcer, nil }