目录导语Casbin是什么实现思路导语 学习一下golang权限控制,保留一下demo代码作为参考 Casbin是什么 Casbin是一个强大的、高效的开源访问控制框架,其权限管理机
Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型,Casbin只负责访问控制。
其功能有:
{subject, object, action}
。root
或administrator
。超级用户可以执行任何操作而无需显式的权限声明。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"}})
}
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权限验证内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Golang利用casbin实现权限验证详解
本文链接: https://www.lsjlt.com/news/194173.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0