前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不会处理鉴权?那用Casbin吧,快速了解入门

不会处理鉴权?那用Casbin吧,快速了解入门

作者头像
小锟哥哥
发布2022-05-10 08:52:39
7780
发布2022-05-10 08:52:39
举报
文章被收录于专栏:GoLang全栈

稍微大一点的项目就一定会涉及到权限管理,这个系列我们给大家介绍一个非常好用的鉴权库 casbin。

它是一个跨平台的库,支持很多种语言的鉴权。

官方文档:https://casbin.org/docs/zh-CN/overview

光讲解这个库的 API 很显然是枯燥的,所以我会结合 Gin,模拟实际开发中的鉴权去给大家讲解他的使用。

所以我们的工程里面会用到到的库如下:

代码语言:javascript
复制
go get github.com/casbin/casbin/v2
go get github.com/gin-gonic/gin

配套Github代码

很开心的告诉大家,这个系列的文章我们会把代码开源到 Github 上,为大家学习的路上扫平一切障碍。

我们官方的 Github 代码阅读,地址如下:

代码语言:javascript
复制
https://github.com/GoLangStackDev/casbin-with-mysql-go.git

本文配套 tag 标记:快速入门

快速入门

来一份入门代码:

代码语言:javascript
复制
package main

import (
 "github.com/casbin/casbin/v2"
 "fmt"
)

func main() {
 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)
 if ok {
  fmt.Println("通过!")
 }else{
  fmt.Println("不通过!")
 }
}
// 统一错误检查
func checkError(err error)  {
 if err!=nil {
  println(err.Error())
 }
}

我定义了一个方法 checkError 来统一处理报错。

这里面涉及到两个配置文件,分别是 model.conf 和 policy.csv 文件。

内容如下:

model.conf

代码语言:javascript
复制
[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

代码语言:javascript
复制
p, member, /posts, GET
p, member, /posts/:id, GET

p, admin, /posts, POST
p, admin, /posts/:id, PUT
p, admin, /posts/:id, DELETE

g, admin, member
g, super, admin
g, lili, member

这两个配置文件你现在就暂时先理解为 model.conf 定义了匹配规则,policy.csv 定义了权限组等权限。

具体的解释我们会在下一篇文章详细介绍。

直接运行起来,你会看到控制台输出:

代码语言:javascript
复制
通过!

假如此时我们把 act 改成 POST 就不能通过了。

没错 act 就表示我们的请求方法。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GoLang全栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配套Github代码
  • 快速入门
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档