低空智控平台 后端go
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.
 
 

54 lines
1.1 KiB

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
}