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
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
|
|
}
|
|
}
|