Files

44 lines
1.0 KiB
Go

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
}