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