diff --git a/server/middleware/casbin_rbac.go b/server/middleware/casbin_rbac.go index b21345ecb407bd656635ca0b01e17d0ff1e463f0..ea9c9824f0a408f16f09840f487078895a86dd1c 100644 --- a/server/middleware/casbin_rbac.go +++ b/server/middleware/casbin_rbac.go @@ -14,8 +14,8 @@ var casbinService = service.ServiceGroupApp.SystemServiceGroup.CasbinService func CasbinHandler() gin.HandlerFunc { return func(c *gin.Context) { waitUse, _ := utils.GetClaims(c) - // 获取请求的URI - obj := c.Request.URL.RequestURI() + // 获取请求的PATH + obj := c.Request.URL.Path // 获取请求方法 act := c.Request.Method // 获取用户的角色 diff --git a/server/resource/rbac_model.conf b/server/resource/rbac_model.conf index 04ebedff9d76a740b074783ce6bbb59357a4867b..b5918d45e964c5c4f5ff2bd5be3c9ae8fc8fc3c7 100644 --- a/server/resource/rbac_model.conf +++ b/server/resource/rbac_model.conf @@ -11,4 +11,4 @@ g = _, _ e = some(where (p.eft == allow)) [matchers] -m = r.sub == p.sub && ParamsMatch(r.obj,p.obj) && r.act == p.act +m = r.sub == p.sub && keyMatch2(r.obj,p.obj) && r.act == p.act diff --git a/server/service/system/sys_casbin.go b/server/service/system/sys_casbin.go index c583ab07ebaf2b80221ad0714e70543a97ab9fb6..118173c651f491e80f72a99b4dab5f427a356c85 100644 --- a/server/service/system/sys_casbin.go +++ b/server/service/system/sys_casbin.go @@ -2,11 +2,9 @@ package system import ( "errors" - "strings" "sync" "github.com/casbin/casbin/v2" - "github.com/casbin/casbin/v2/util" gormadapter "github.com/casbin/gorm-adapter/v3" "github.com/flipped-aurora/gin-vue-admin/server/global" "github.com/flipped-aurora/gin-vue-admin/server/model/system" @@ -104,33 +102,7 @@ func (casbinService *CasbinService) Casbin() *casbin.SyncedEnforcer { once.Do(func() { a, _ := gormadapter.NewAdapterByDB(global.GVA_DB) syncedEnforcer, _ = casbin.NewSyncedEnforcer(global.GVA_CONFIG.Casbin.ModelPath, a) - syncedEnforcer.AddFunction("ParamsMatch", casbinService.ParamsMatchFunc) }) _ = syncedEnforcer.LoadPolicy() return syncedEnforcer } - -//@author: [piexlmax](https://github.com/piexlmax) -//@function: ParamsMatch -//@description: 自定义规则函数 -//@param: fullNameKey1 string, key2 string -//@return: bool - -func (casbinService *CasbinService) ParamsMatch(fullNameKey1 string, key2 string) bool { - key1 := strings.Split(fullNameKey1, "?")[0] - // 剥离路径后再使用casbin的keyMatch2 - return util.KeyMatch2(key1, key2) -} - -//@author: [piexlmax](https://github.com/piexlmax) -//@function: ParamsMatchFunc -//@description: 自定义规则函数 -//@param: args ...interface{} -//@return: interface{}, error - -func (casbinService *CasbinService) ParamsMatchFunc(args ...interface{}) (interface{}, error) { - name1 := args[0].(string) - name2 := args[1].(string) - - return casbinService.ParamsMatch(name1, name2), nil -}