Files

38 lines
1.0 KiB
Go

package db
import (
"EnGin/internal/global"
"fmt"
"github.com/casbin/casbin/v3"
entadapter "github.com/casbin/ent-adapter"
)
// GlobalEnforcer 全局的 Casbin 权限强制执行器
var GlobalEnforcer *casbin.Enforcer
// InitCasbin 初始化 Casbin 并绑定数据库适配器
func InitCasbin() error {
// 初始化 ent-adapter,它会自动使用您配置的数据库并在库中生成 casbin_rule 表
adapter, err := entadapter.NewAdapter(global.Config.Database.Driver, global.Config.Database.Dsn())
if err != nil {
return fmt.Errorf("初始化 Casbin 数据库适配器失败: %w", err)
}
// 加载本地的配置文件和数据库适配器
enforcer, err := casbin.NewEnforcer("configs/casbin.conf", adapter)
if err != nil {
return fmt.Errorf("创建 Casbin Enforcer 失败: %w", err)
}
// 从数据库加载权限规则
if err := enforcer.LoadPolicy(); err != nil {
return fmt.Errorf("加载 Casbin 策略失败: %w", err)
}
GlobalEnforcer = enforcer
global.Log.Info("Casbin 初始化成功")
return nil
}