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

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

 [[431457]]

本文转载自微信公众号「GoLang全栈」,作者锟。转载本文请联系GoLang全栈公众号。

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

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

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

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

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

  1. go get github.com/casbin/casbin/v2 
  2. go get github.com/gin-gonic/gin 

配套Github代码

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

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

  1. https://github.com/GoLangStackDev/casbin-with-mysql-go.git 

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

快速入门

来一份入门代码:

  1. package main 
  2.  
  3. import ( 
  4.  "github.com/casbin/casbin/v2" 
  5.  "fmt" 
  6.  
  7. func main() { 
  8.  sub := "lili" 
  9.  obj := "/posts" 
  10.  act := "GET" 
  11.  
  12.  e,err := casbin.NewEnforcer("resources/model.conf","resources/policy.csv"
  13.  checkError(err) 
  14.  ok,err := e.Enforce(sub,obj,act) 
  15.  checkError(err) 
  16.  if ok { 
  17.   fmt.Println("通过!"
  18.  }else
  19.   fmt.Println("不通过!"
  20.  } 
  21. // 统一错误检查 
  22. func checkError(err error)  { 
  23.  if err!=nil { 
  24.   println(err.Error()) 
  25.  } 

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

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

内容如下:

model.conf

  1. [request_definition] 
  2. r = sub, obj, act 
  3.  
  4. [policy_definition] 
  5. p = sub, obj, act 
  6.  
  7. [role_definition] 
  8. g = _, _ 
  9.  
  10. [policy_effect] 
  11. e = some(where (p.eft == allow)) 
  12.  
  13. [matchers] 
  14. m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act 

policy.csv

  1. p, member, /posts, GET 
  2. p, member, /posts/:id, GET 
  3.  
  4. p, admin, /posts, POST 
  5. p, admin, /posts/:id, PUT 
  6. p, admin, /posts/:id, DELETE 
  7.  
  8. g, admin, member 
  9. g, super, admin 
  10. g, lili, member 

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

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

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

  1. 通过! 

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

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

责任编辑:武晓燕 来源: GoLang全栈
相关推荐

2023-11-20 08:09:11

Pulsar鉴权topic

2021-09-02 07:00:32

鉴权Web 应用Cookie-sess

2021-09-01 10:15:15

前端cookiesession

2021-08-04 08:31:10

MySQL数据库日志

2021-09-07 11:20:02

binlogMySQL数据库

2019-05-20 14:57:35

Tomcat容器安全

2024-01-26 14:35:03

鉴权K8sNode

2014-07-10 11:34:05

2018-01-10 14:22:05

2024-05-28 08:24:18

2021-10-26 11:42:51

系统

2023-03-30 07:48:46

接口鉴权SpringBoot

2024-10-14 11:56:50

2022-12-02 16:28:47

2023-10-31 07:13:43

2020-12-28 06:20:27

OptionalTryjava

2020-12-02 08:31:47

Elasticsear

2020-08-05 14:28:32

编程程序员代码

2022-05-31 08:36:41

微服务网关鉴权

2024-10-10 12:21:56

JWTSession扩展性
点赞
收藏

51CTO技术栈公众号