网络编程
位置:首页>> 网络编程>> Go语言>> Golang利用casbin实现权限验证详解

Golang利用casbin实现权限验证详解

作者:爷来辣  发布时间:2023-08-06 23:18:45 

标签:Golang,casbin

导语

学习一下golang权限控制,保留一下demo代码作为参考

Casbin是什么

Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型,Casbin只负责访问控制。

其功能有:

  • 支持自定义请求的格式,默认的请求格式为{subject, object, action}

  • 具有访问控制模型model和策略policy两个核心概念。

  • 支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色。

  • 支持内置的超级用户 例如:rootadministrator。超级用户可以执行任何操作而无需显式的权限声明。

  • 支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /foo/bar 可以映射到 /foo*

实现思路

package main

import (
"fmt"
"github.com/casbin/casbin/v2"
gormadapter "github.com/casbin/gorm-adapter/v3"
_ "github.com/go-sql-driver/mysql"
)

func main() {
//e, err := casbin.NewEnforcer("model.conf", "policy.csv")  // 本地policy

a, _ := gormadapter.NewAdapter("mysql", "root:pass@tcp(localhost:3306)/casbin?charset=utf8mb4&parseTime=True&loc=Local", true) // 数据库policy
e, _ := casbin.NewEnforcer("./model.conf", a)                                                                                            // model依旧放本地 没有必要放数据库 把a变成了适配器存到了数据库

// Load the policy from DB.
e.LoadPolicy()

// Check the permission.
e.Enforce("alice", "data1", "read")

// Modify the policy.
// e.AddPolicy(...)
// e.RemovePolicy(...)

// Save the policy back to DB.
e.SavePolicy()
sub := "alice" // 想要访问资源的用户
obj := "data1" // 将要被访问的资源
act := "read"  // 用户对资源实施的操作
//added, err := e.AddPolicy("alice", "data1", "read") // added返回是bool类型
//fmt.Println(added)
//fmt.Println(err)
//if err != nil {
//// 处理错误
//fmt.Printf("%s", err)
//}
ok, err := e.Enforce(sub, obj, act)

if err != nil {
// 处理错误
fmt.Printf("%s", err)
}

if ok == true {
// 允许 alice 读取 data1
fmt.Println("通过")
} else {
// 拒绝请求,抛出异常
fmt.Println("未通过")
}

// 您可以使用 BatchEnforce() 去批量处理一些请求。
// 这个方法返回一个布尔类型的切片,切片的下标对应二位数组的行标
// 例如 results[0] 是 {"alice", "data1", "read"} 的结果
//results, err := e.BatchEnforce([][]interface{}{{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"jack", "data3", "read"}})
}

Golang利用casbin实现权限验证详解

package main

import (
"fmt"
"github.com/casbin/casbin/v2"
gormadapter "github.com/casbin/gorm-adapter/v3"
_ "github.com/go-sql-driver/mysql"
)

func main() {
//e, err := casbin.NewEnforcer("model.conf", "policy.csv")  // 本地policy

a, _ := gormadapter.NewAdapter("mysql", "root:pass@tcp(localhost:3306)/casbin?charset=utf8mb4&parseTime=True&loc=Local", true) // 数据库policy
e, _ := casbin.NewEnforcer("./model.conf", a)                                                                                            // model依旧放本地 没有必要放数据库 把a变成了适配器存到了数据库

// Load the policy from DB.
e.LoadPolicy()

// Check the permission.
e.Enforce("alice", "data1", "read")

// Modify the policy.
// e.AddPolicy(...)
// e.RemovePolicy(...)

// Save the policy back to DB.
e.SavePolicy()
sub := "alice" // 想要访问资源的用户
obj := "data1" // 将要被访问的资源
act := "read"  // 用户对资源实施的操作
added, err := e.AddPolicy("alice", "data1", "read") // added返回是bool类型
fmt.Println(added)

if err != nil {
// 处理错误
fmt.Printf("%s", err)
}
ok, err := e.Enforce(sub, obj, act)

if err != nil {
// 处理错误
fmt.Printf("%s", err)
}

if ok == true {
// 允许 alice 读取 data1
fmt.Println("通过")
} else {
// 拒绝请求,抛出异常
fmt.Println("未通过")
}

// 您可以使用 BatchEnforce() 去批量处理一些请求。
// 这个方法返回一个布尔类型的切片,切片的下标对应二位数组的行标
// 例如 results[0] 是 {"alice", "data1", "read"} 的结果
//results, err := e.BatchEnforce([][]interface{}{{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"jack", "data3", "read"}})
}

Golang利用casbin实现权限验证详解

Golang利用casbin实现权限验证详解

来源:https://blog.csdn.net/xujiamin0022016/article/details/128071277

0
投稿

猜你喜欢

  • 首先说说什么是内存泄露,在一个进程中,如果某一块内存无法访问,且直到进程结束为止也无法释放,那么就发生了内存泄露。通常这种情况发生在C++之
  • 在本人看来,HTML 5是一个妥协方案,虽不激进,但更能推动技术的继续进步。没有命名空间,元素也不要求闭合(当然这并不是优点),浏览器也可以
  • 我就废话不多说了,直接上代码吧!import torchimport torch.nn.functional as Fimport nump
  • 在网页局部的布局上,需要采用大量的自适应,来满足不同长度数据、内容的合理呈现。以此保证页面不至于因为内容过多等原因,导致重叠、溢出、撑开等破
  • 在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式。掌握 Ajax 的这一期讨论另一种有用的数据格式 JavaScr
  • 优点:·减少使用空间·使后面的背景层模糊或者渐隐出现让用户的焦点集中在当前层。什么时候使用(对话框等)模式窗口?·图片/视频灯箱效果·联系表
  • 例如:我们在百度中搜索 词典网,则网址后面的参数就是http://www.baidu.com/s?cl=3&wd=%B4%CA%B5
  •  < % Response.CharSet="gb2312"  tblna
  • 首先需要安装Win32-ODBC模块,具体的步骤如下:1:从TOOLS栏目中下载Win32-ODBC.zip,下载完后用winzip解开到一
  • PHP xpath() 函数定义和用法xpath()函数运行对 XML 文档的 XPath 查询。如果成功,该函数返回 SimpleXMLE
  • CSS的学习和其他的学习一样,都需要特定的方法才能比较快的去掌握它.要想掌握CSS, 首先要学会HTML,我刚开始是从零开始学习的
  • 对于许多想学习JavaScript的朋友来说,无疑如何选择入门的书籍是他们最头疼的问题,或许也是他们一直畏惧,甚至放弃学习JavaScrip
  • 在Twinsen Liang的博客上看到一篇名为语义化单单的限定在html么?的文章,文中主要是提及了CSS的命名规则,仔细阅读后,我认为这
  • 于是写测试程序。。。不行 下载最新的ODBC。。。还是不行 通过sql plus查询。。。咦?竟然也查不到。。。 于是,折腾。。。折腾。。。
  • 前言随着网站的内容的增多和用户访问量的增多,网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,,我们往往需要在此时对我们的网站
  • 尽管可能是个比较老的话题了,但是我还是从来没有整理过。今天在《精通HTML》一书中看到,这里整理一下。在XHTML中,<html>
  • 这片文章大体概括了一些设计网页中的大问题。希望能给你做下一个网页时给予一些儿启发。1、记住:你能掌控的时间是有限的我仅仅用4秒钟就能浏览完平
  • 阅读上一篇:javascript 45种缓动效果(一)这部分对原先的缓动函数进行抽象化,并结合缓动公式进行强化。成品的效果非常惊人逆天。走过
  • cooper谈到用户的视觉路径一般是:从上到下,从左到右。好的视觉设计路径应该是顺应这样的用户习惯,糟糕的设计会让用户无所适从,焦点到处都是
  • 购物车是电子商务网站中不可缺少的组成部分,但目前大多数购物车只能作为一个顾客选中商品的展示,客户端无法将购物车里的内容提取出来满足自己事务处
手机版 网络编程 asp之家 www.aspxhome.com