You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.8 KiB

package casbin_v2
import (
"errors"
"github.com/casbin/casbin/v2"
"github.com/casbin/casbin/v2/model"
gormadapter "github.com/casbin/gorm-adapter/v3"
"gorm.io/gorm"
"goskeleton/app/global/my_errors"
"goskeleton/app/global/variable"
"strings"
"time"
)
//创建 casbin Enforcer(执行器)
func InitCasbinEnforcer() (*casbin.SyncedEnforcer, error) {
var tmpDbConn *gorm.DB
var Enforcer *casbin.SyncedEnforcer
switch strings.ToLower(variable.ConfigGormv2Yml.GetString("Gormv2.UseDbType")) {
case "mysql":
if variable.GormDbMysql == nil {
return nil, errors.New(my_errors.ErrorCasbinCanNotUseDbPtr)
}
tmpDbConn = variable.GormDbMysql
case "sqlserver", "mssql":
if variable.GormDbSqlserver == nil {
return nil, errors.New(my_errors.ErrorCasbinCanNotUseDbPtr)
}
tmpDbConn = variable.GormDbSqlserver
case "postgre", "postgresql", "postgres":
if variable.GormDbPostgreSql == nil {
return nil, errors.New(my_errors.ErrorCasbinCanNotUseDbPtr)
}
tmpDbConn = variable.GormDbPostgreSql
default:
}
prefix := variable.ConfigYml.GetString("Casbin.TablePrefix")
tbName := variable.ConfigYml.GetString("Casbin.TableName")
a, err := gormadapter.NewAdapterByDBUseTableName(tmpDbConn, prefix, tbName)
if err != nil {
return nil, errors.New(my_errors.ErrorCasbinCreateAdaptFail)
}
modelConfig := variable.ConfigYml.GetString("Casbin.ModelConfig")
if m, err := model.NewModelFromString(modelConfig); err != nil {
return nil, errors.New(my_errors.ErrorCasbinNewModelFromStringFail + err.Error())
} else {
if Enforcer, err = casbin.NewSyncedEnforcer(m, a); err != nil {
return nil, errors.New(my_errors.ErrorCasbinCreateEnforcerFail)
}
_ = Enforcer.LoadPolicy()
AutoLoadSeconds := variable.ConfigYml.GetDuration("Casbin.AutoLoadPolicySeconds")
Enforcer.StartAutoLoadPolicy(time.Second * AutoLoadSeconds)
return Enforcer, nil
}
}