package common import ( "fmt" "strconv" "laic-backend/logger" "github.com/casbin/casbin/v3" gormadapter "github.com/casbin/gorm-adapter/v3" ) var CasbinEnforcer *casbin.Enforcer // SetUserRole 同步用户在 Casbin 中的角色映射(g 策略),role 为空则清空 func SetUserRole(userID int64, role string) error { if CasbinEnforcer == nil { return nil } uid := strconv.FormatInt(userID, 10) if _, err := CasbinEnforcer.DeleteRolesForUser(uid); err != nil { return err } if role == "" { return nil } _, err := CasbinEnforcer.AddRoleForUser(uid, role) return err } func InitCasbinEnforcer() { e, err := mysqlCasbin() if err != nil { logger.ERROR("初始化Casbin失败", err) panic(fmt.Sprintf("初始化Casbin失败: %v", err)) } CasbinEnforcer = e logger.INFO("初始化Casbin完成") } func mysqlCasbin() (*casbin.Enforcer, error) { a, err := gormadapter.NewAdapterByDB(DB) if err != nil { return nil, err } e, err := casbin.NewEnforcer("casbin.model", a) if err != nil { return nil, err } if err = e.LoadPolicy(); err != nil { return nil, err } return e, nil }