44 lines
1.0 KiB
Go
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
|
|
}
|