39 lines
854 B
Go
39 lines
854 B
Go
package casbinx
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/casbin/casbin/v2"
|
|
"github.com/casbin/casbin/v2/model"
|
|
gormadapter "github.com/casbin/gorm-adapter/v3"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// NewCasbin creates a new casbinx enforcer with a mysql adapter and loads the policy from the file system.
|
|
func NewCasbin(engine *gorm.DB) *casbin.SyncedCachedEnforcer {
|
|
a, err := gormadapter.NewAdapterByDBUseTableName(engine, "sca_auth_", "permission_rule")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
cwd, err := os.Getwd()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
path := filepath.Join(cwd, "/api/etc", "rbac_model.conf")
|
|
modelFile, err := model.NewModelFromFile(path)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
e, err := casbin.NewSyncedCachedEnforcer(modelFile, a)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
e.EnableCache(true)
|
|
err = e.LoadPolicy()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return e
|
|
}
|