Restrict 项目使用与配置指南
restrict RBAC/ABAC authorization library for Go. 项目地址: https://gitcode.com/gh_mirrors/re/restrict
1. 项目目录结构及介绍
Restrict 是一个用于 Go 语言的授权库,它结合了基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC),允许定义简单的基于角色的策略,同时也在需要时提供细粒度的控制。以下是项目的目录结构及各部分的简要介绍:
restrict/
├── adapters/ # 存放适配器相关代码,用于持久化策略
├── common_errors.go # 定义通用错误类型
├── condition.go # 定义条件接口及其实现
├── condition_empty.go # 实现空值条件
├── condition_equal.go # 实现相等条件
├── internal/ # 内部实现代码
├── mocks_test.go # 模拟测试代码
├── permission.go # 定义权限接口及其实现
├── policy_definition.go # 定义策略结构
├── policy_manager.go # 定义策略管理器
├── resource.go # 定义资源接口
├── role.go # 定义角色接口
├── storage_adapter.go # 定义存储适配器接口
├── subject.go # 定义主体接口
├── value_descriptor.go # 定义值描述符
├── value_source.go # 定义值源接口
├── .githooks/ # Git钩子脚本
├── .gitignore # Git忽略文件
├── CHANGELOG.md # 更改日志
├── LICENSE # 许可证文件
├── README.md # 项目说明文件
└── go.mod # Go模块依赖
2. 项目的启动文件介绍
项目的启动文件通常是 main.go
,不过在这个项目中并没有直接提供 main.go
文件。不过,你可以根据以下示例创建一个启动文件:
package main
import (
"fmt"
"log"
"github.com/el-mike/restrict/v2"
"github.com/el-mike/restrict/v2/adapters"
)
func main() {
// 定义策略
var policy = &restrict.PolicyDefinition{
// ... 策略定义内容 ...
}
// 创建策略管理器
policyManager, err := restrict.NewPolicyManager(adapters.NewInMemoryAdapter(policy), true)
if err != nil {
log.Fatal(err)
}
// 创建访问管理器
manager := restrict.NewAccessManager(policyManager)
// 尝试授权
err = manager.Authorize(&restrict.AccessRequest{
// ... 请求内容 ...
})
if err != nil {
fmt.Println(err)
}
}
在这个启动文件中,你需要定义你的策略,创建策略管理器,然后创建访问管理器,最后尝试进行授权。
3. 项目的配置文件介绍
在 Restrict 项目中,配置通常是通过代码直接定义的,而不是通过外部的配置文件。不过,项目支持使用内置的适配器来持久化策略,例如使用 JSON 或 YAML 文件。下面是一个示例,展示如何使用 JSON 文件作为配置:
首先,创建一个 JSON 文件(例如 policy.json
),内容如下:
{
"Roles": {
"User": {
"Grants": {
"Conversation": {
"Permissions": [
{"Action": "read"},
{"Action": "create"},
{"Preset": "updateOwn"},
{"Action": "delete", "Conditions": [{"ID": "deleteActive", "Value": {"Source": "ResourceField", "Field": "Active"}}]}
]
}
}
}
}
}
然后,在你的 Go 代码中,你可以使用 adapters.NewJsonAdapter
来加载这个 JSON 文件:
policyManager, err := restrict.NewPolicyManager(adapters.NewJsonAdapter("policy.json"), true)
if err != nil {
log.Fatal(err)
}
这样,你就可以通过外部的 JSON 文件来配置策略了。
restrict RBAC/ABAC authorization library for Go. 项目地址: https://gitcode.com/gh_mirrors/re/restrict
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考