RethinkDB Adapter 项目教程
1. 项目目录结构及介绍
rethinkdb-adapter/
├── examples/
│ └── casbinmodel.conf
├── .gitignore
├── LICENSE
├── README.md
├── rethinkadapter.go
└── rethinkadapter_test.go
目录结构说明
- examples/: 包含示例配置文件
casbinmodel.conf
,用于演示如何配置 Casbin 模型。 - .gitignore: Git 忽略文件,指定哪些文件和目录不需要被版本控制。
- LICENSE: 项目的开源许可证文件,本项目使用 MIT 许可证。
- README.md: 项目的介绍文档,包含项目的基本信息、安装和使用说明。
- rethinkadapter.go: 项目的主要代码文件,实现了 RethinkDB 适配器的主要功能。
- rethinkadapter_test.go: 项目的测试文件,包含对
rethinkadapter.go
中功能的单元测试。
2. 项目启动文件介绍
项目的启动文件是 rethinkadapter.go
,该文件实现了 RethinkDB 适配器的主要功能,允许 Casbin 从 RethinkDB 加载和保存策略。
主要功能
- NewAdapter: 创建一个新的 RethinkDB 适配器实例。
- NewAdapterDB: 创建一个新的 RethinkDB 适配器实例,并指定数据库和表名。
- LoadPolicy: 从 RethinkDB 加载策略。
- SavePolicy: 将策略保存到 RethinkDB。
示例代码
package main
import (
"os"
r "gopkg.in/gorethink/gorethink.v3"
"github.com/casbin/casbin"
"github.com/adityapandey9/rethinkdb-adapter"
)
func getConnect() r.QueryExecutor {
url := os.Getenv("RETHINKDB_URL")
if url == "" {
url = "localhost:28015"
}
session, _ := r.Connect(r.ConnectOpts{
Address: url,
})
return session
}
func main() {
session := getConnect()
a := rethinkadapter.NewAdapter(session)
e := casbin.NewEnforcer("examples/casbinmodel.conf", a)
e.LoadPolicy()
e.Enforce("alice", "data1", "read")
e.SavePolicy()
}
3. 项目的配置文件介绍
项目的配置文件主要是 examples/casbinmodel.conf
,该文件定义了 Casbin 的访问控制模型。
配置文件内容
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
配置文件说明
- request_definition: 定义了请求的格式,包括
sub
(主体)、obj
(对象)和act
(动作)。 - policy_definition: 定义了策略的格式,与请求格式一致。
- policy_effect: 定义了策略的效果,这里表示只要有一条策略允许,则请求被允许。
- matchers: 定义了匹配规则,这里表示请求的主体、对象和动作必须与策略中的完全匹配。
通过以上配置,Casbin 可以根据 RethinkDB 中的策略来判断请求是否被允许。