Restrict 项目使用与配置指南

Restrict 项目使用与配置指南

restrict RBAC/ABAC authorization library for Go. restrict 项目地址: 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. restrict 项目地址: https://gitcode.com/gh_mirrors/re/restrict

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张栋涓Kerwin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值