Files
paralus/pkg/enforcer/enforcer.go
nirav-rafay c66bdc25cd restructure rcloud-base as a single base controller (#37)
* restructure rcloud-base as a single base controller
* updated master.rest
* moved sentry from internal to pkg as it is used by relay
* removing unused rpc and it's dependencies
* Fix usermgmt tests
* Don't redefine variables in rest file
Co-authored-by: Abin Simon <abin.simon@rafay.co>
2022-03-03 17:59:06 +05:30

58 lines
1.1 KiB
Go

package enforcer
import (
"github.com/casbin/casbin/v2"
"github.com/casbin/casbin/v2/model"
"github.com/casbin/casbin/v2/util"
gormadapter "github.com/casbin/gorm-adapter/v3"
"gorm.io/gorm"
)
type casbinEnforcer struct {
db *gorm.DB
}
func NewCasbinEnforcer(db *gorm.DB) *casbinEnforcer {
return &casbinEnforcer{
db: db,
}
}
func (e *casbinEnforcer) Init() (*casbin.CachedEnforcer, error) {
adapter, err := gormadapter.NewAdapterByDB(e.db)
if err != nil {
return nil, err
}
modelText := `
[request_definition]
r = sub, ns, proj, org, obj, act
[policy_definition]
p = sub, ns, proj, org, obj, act
[role_definition]
g = _, _
g2 = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g2(r.sub, p.sub) && globMatch(r.ns, p.ns) && globMatch(r.proj, p.proj) && r.org == p.org && g(r.obj, p.obj) && globMatch(r.act, p.act)
`
m, err := model.NewModelFromString(modelText)
if err != nil {
return nil, err
}
enforcer, err := casbin.NewCachedEnforcer(m, adapter)
if err != nil {
return nil, err
}
enforcer.Enforcer.AddNamedDomainMatchingFunc("g", "", util.KeyMatch2)
return enforcer, nil
}