mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-04-23 10:58:35 +08:00
66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
package casbin
|
|
|
|
import (
|
|
"github.com/casbin/casbin/v2"
|
|
gormadapter "github.com/casbin/gorm-adapter/v3"
|
|
"pandax/base/biz"
|
|
"pandax/base/config"
|
|
"pandax/base/global"
|
|
"sync"
|
|
)
|
|
|
|
func UpdateCasbin(roleKey string, casbinInfos []CasbinRule) error {
|
|
ClearCasbin(0, roleKey)
|
|
rules := [][]string{}
|
|
for _, v := range casbinInfos {
|
|
rules = append(rules, []string{roleKey, v.Path, v.Method})
|
|
}
|
|
e := Casbin()
|
|
success, _ := e.AddPolicies(rules)
|
|
biz.IsTrue(success, "存在相同api,添加失败,请联系管理员")
|
|
return nil
|
|
}
|
|
|
|
func UpdateCasbinApi(oldPath string, newPath string, oldMethod string, newMethod string) {
|
|
err := global.Db.Table("casbin_rule").Model(&CasbinRule{}).Where("v1 = ? AND v2 = ?", oldPath, oldMethod).Updates(map[string]interface{}{
|
|
"v1": newPath,
|
|
"v2": newMethod,
|
|
}).Error
|
|
biz.ErrIsNil(err, "修改api失败")
|
|
}
|
|
|
|
func GetPolicyPathByRoleId(roleKey string) (pathMaps []CasbinRule) {
|
|
e := Casbin()
|
|
list := e.GetFilteredPolicy(0, roleKey)
|
|
for _, v := range list {
|
|
pathMaps = append(pathMaps, CasbinRule{
|
|
Path: v[1],
|
|
Method: v[2],
|
|
})
|
|
}
|
|
return pathMaps
|
|
}
|
|
|
|
func ClearCasbin(v int, p ...string) bool {
|
|
e := Casbin()
|
|
success, _ := e.RemoveFilteredPolicy(v, p...)
|
|
return success
|
|
|
|
}
|
|
|
|
var (
|
|
syncedEnforcer *casbin.SyncedEnforcer
|
|
once sync.Once
|
|
)
|
|
|
|
func Casbin() *casbin.SyncedEnforcer {
|
|
once.Do(func() {
|
|
a, err := gormadapter.NewAdapterByDB(global.Db)
|
|
biz.ErrIsNil(err, "新建权限适配器失败")
|
|
syncedEnforcer, err = casbin.NewSyncedEnforcer(config.Conf.Casbin.ModelPath, a)
|
|
biz.ErrIsNil(err, "新建权限适配器失败")
|
|
})
|
|
_ = syncedEnforcer.LoadPolicy()
|
|
return syncedEnforcer
|
|
}
|