casbin GET请求路径也包括请求所带的参数解决方法

在进行casbin的接入的时候。本来是用的 c.Request.RequestURI,发现他不仅包含路径也包括请求所带的参数。所以在policy.csv中是无法定义的。改用c.Request.URL.Path

在这里插入图片描述
在这里插入图片描述
正确如下:
这样就解决了get 方法携带querystring参数不能正确匹配policy.csv的问题

var E *casbin.Enforcer
func SetupGinRouter(mode string, enableHttps bool) *gin.Engine {
e, err := casbin.NewEnforcer("./router/model.conf", "./router/policy.csv")
	if err != nil {
		fmt.Println(err)
		return err
	}
	E = e
	E.EnableLog(true)
    if mode == gin.ReleaseMode {
		gin.SetMode(gin.ReleaseMode) // gin设置成release 发布模式 不设置默认debug模式
	}
	r := gin.New()
	
	r.Use(CORSMiddleware())
	
	if enableHttps {
		r.Use(TlsHandler())
	}
	
	r.Use(RBAC())
	
	
}
func RBAC() gin.HandlerFunc {
	return func(c *gin.Context) {
		user := c.Request.Header.Get("key")
		fmt.Println(user)
		fmt.Printf("\n  %v   %v \n", c.Request.RequestURI, c.Request.Method)
		fmt.Printf("\n  %v   %v \n", c.Request.URL.Path, c.Request.Method)
		access, err := E.Enforce(user, c.Request.URL.Path, c.Request.Method)
		if err != nil || !access {
			fmt.Printf("err: %v ", err)
			fmt.Printf("\n access: %v ", access)
			c.AbortWithStatusJSON(403, gin.H{"message": "forbidden"})
		} else {
			c.Next()
		}
	}
}

policy.csv文件:

p, admin, /api/task/mytask,  GET
g, bob, admin, /api/task/mytask

apifox请求 :
GET http://127.0.0.1:8080/api/task/mytask?address=0x8dAdddgr76EF4F0e4d885D13F1714A62e4C18Aa1
在这里插入图片描述

输出:

2022/09/27 16:27:49 Request: admin, /api/task/mytask, GET ---> true
Hit Policy: 
0x8dAdddgr76EF4F0e4d885D13F1714A62e4C18Aa1

为true


更新, 存代码
在这里插入图片描述

##model.conf
[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[role_definition]
g = _, _

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
## policy.csv
p, admin, /api/kol/ranking, GET
p, admin, /api/task/findtask,  POST
p, admin, /api/task/mytask,  GET

g, hp, admin, /api/kol/ranking
g, hp, admin, /api/task/findtask
g, hp, admin, /api/task/mytask
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值