当前位置: 首页 > 科技观察

无法处理身份验证?快来使用Casbin快速入门

时间:2023-03-19 18:26:59 科技观察

转载本文请联系GoLang全栈公众号。稍微大一点的项目肯定会涉及到权限管理。在本系列中,我们将介绍一个非常好用的认证库casbin。它是一个跨平台的库,支持多种语言的身份验证。官方文档:https://casbin.org/docs/zh-CN/overview仅仅讲解这个库的API显然很无聊,所以我在实际开发中结合Gin来模拟认证来给大家讲解一下它的使用方法。所以我们项目中会用到的库如下:gogetgithub.com/casbin/casbin/v2gogetgithub.com/gin-gonic/gin支持Github代码很高兴的告诉大家,我们会为此将代码开源到Github在系列文章的路上,我们将扫除学习路上的一切障碍。我们官方Github代码阅读,地址如下:https://github.com/GoLangStackDev/casbin-with-mysql-go.git本文配套标签:QuickStartQuickStart附带一个入门代码:packagemainimport("github.com/casbin/casbin/v2""fmt")funcmain(){sub:="lili"obj:="/posts"act:="GET"e,err:=casbin.NewEnforcer("resources/model.conf""resources/policy.csv")checkError(err)ok,err:=e.Enforce(sub,obj,act)checkError(err)ifok{fmt.Println("Pass!")}else{fmt.Println("Notpassed!")}}//统一错误检查funccheckError(errerror){iferr!=nil{println(err.Error())}}我定义了一个方法checkError来统一处理错误。涉及到两个配置文件,分别是model.conf和policy.csv文件。内容如下: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.actpolicy.csvp,member,/posts,GETp,member,/posts/:id,GETp,admin,/posts,POSTp,admin,/posts/:id,PUTp,admin,/posts/:id,DELETEg,admin,member,super,admin,lili,member这两个配置文件你要了解现在为model.conf定义了匹配规则,为policy.csv定义了权限组等权限。具体解释将在下一篇文章中详细介绍。直接运行,会看到控制台输出:passed!如果这时候我们把act改成POST,就不会通过。没错,act就是我们的请求方法。