您现在的位置是:首页 > 文章详情

Casbin+Gin+XORM的权限控制demo(二)

日期:2020-02-15点击:634

casbin的增删查(casbin没有update的API,如果需要更新policy,那么只有先删除再添加)

还是直接上代码

package main import ( "fmt" "log" "github.com/casbin/casbin/v2" xormadapter "github.com/casbin/xorm-adapter/v2" "github.com/gin-gonic/gin" _ "github.com/go-sql-driver/mysql" ) func main() { a, err := xormadapter.NewAdapter("mysql", "rbac:123456@tcp(127.0.0.1:3306)/rbac_db?charset=utf8", true) if err != nil { log.Printf("连接数据库错误: %v", err) return } e, err := casbin.NewEnforcer("rbac_models.conf", a) if err != nil { log.Printf("初始化casbin错误: %v", err) return } //从DB加载策略 e.LoadPolicy() //获取router路由对象 r := gin.New() //增加policy r.POST("/api/v1/add", func(c *gin.Context) { fmt.Println("增加Policy") if ok, _ := e.AddPolicy("admin", "/api/v1/world", "GET"); !ok { fmt.Println("Policy已经存在") } else { fmt.Println("增加成功") } }) //删除policy r.DELETE("/api/v1/delete", func(c *gin.Context) { fmt.Println("删除Policy") if ok, _ := e.RemovePolicy("admin", "/api/v1/world", "GET"); !ok { fmt.Println("Policy不存在") } else { fmt.Println("删除成功") } }) //获取policy r.GET("/api/v1/get", func(c *gin.Context) { fmt.Println("查看policy") list := e.GetPolicy() for _, vlist := range list { for _, v := range vlist { fmt.Printf("value: %s, ", v) } } }) //使用自定义拦截器中间件 r.Use(Authorize(e)) //创建请求 r.GET("/api/v1/hello", func(c *gin.Context) { fmt.Println("Hello 接收到GET请求..") }) r.Run(":9000") //参数为空 默认监听8080端口 } //拦截器 func Authorize(e *casbin.Enforcer) gin.HandlerFunc { return func(c *gin.Context) { //获取请求的URI obj := c.Request.URL.RequestURI() //获取请求方法 act := c.Request.Method //获取用户的角色 sub := "admin1" //判断策略中是否存在 if ok, _ := e.Enforce(sub, obj, act); ok { fmt.Println("恭喜您,权限验证通过") c.Next() } else { fmt.Println("很遗憾,权限验证没有通过") c.Abort() } } }
原文链接:https://yq.aliyun.com/articles/744974
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章