#grpc-client #grpc #grpc-api #spicedb #zed #async #authzed

bin+lib spicedb-grpc

自动生成的 SpiceDB gRPC 客户端

2 个版本

0.1.1 2024 年 8 月 10 日
0.1.0 2024 年 8 月 3 日

591网络编程

Download history 106/week @ 2024-07-29 137/week @ 2024-08-05 67/week @ 2024-08-12

每月 310 次下载
用于 spicedb-client

Apache-2.0

160KB
2K SLoC

spicedb-grpc

自动生成的 SpiceDB gRPC API Rust 客户端。

功能

  • 通过 Tonic 为 SpiceDB 提供异步 gRPC 客户端
  • 从官方 AuthZed SpiceDB protobuf 定义生成

安装

将此添加到您的 Cargo.toml

[dependencies]
spicedb-grpc = "0.1.1"

使用

use spicedb_client::authzed::api::v1::permissions_service_client::PermissionsServiceClient;
use spicedb_client::authzed::api::v1::CheckPermissionRequest;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let spicedb_url =
        env::var("SPICEDB_URL").unwrap_or_else(|_| "https://127.0.0.1:50051".to_string());

    let preshared_key =
        env::var("SPICEDB_PRESHARED_KEY").unwrap_or_else(|_| "spicedb".to_string());
    let preshared_key: MetadataValue<_> = format!("bearer {preshared_key}").parse().unwrap();

    let channel = Channel::from_shared(spicedb_url)
        .unwrap()
        .connect()
        .await
        .unwrap();

    let interceptor = move |mut req: Request<()>| {
        req.metadata_mut()
            .insert("authorization", preshared_key.clone());
        Ok(req)
    };

    let mut client =
        PermissionsServiceClient::with_interceptor(channel.clone(), interceptor.clone());

    let request = CheckPermissionRequest {
        consistency: None,
        resource: Some(ObjectReference {
            object_type: "document".to_string(),
            object_id: "mydoc".to_string(),
        }),
        permission: "read".to_string(),
        subject: Some(SubjectReference {
            object: Some(ObjectReference {
                object_type: "user".to_string(),
                object_id: "me".to_string(),
            }),
            optional_relation: "".to_string(),
        }),
        context: None,
        with_tracing: false,
    };

    let response = client.check_permission(request).await.unwrap();

    println!("Response: {:?}", response);

    Ok(())
}

文档

有关 buf.build/authzed/api 的文档,请参阅 Buf 包文档

开发

首先安装 buf。

brew install bufbuild/buf/buf

然后下载 proto 文件。

buf export buf.build/authzed/api -o proto

并从 proto 生成 Rust 代码。

cargo run --features=gen gen

如果有新文件生成,请更新 lib.rs 以包含它们。

贡献

我们欢迎贡献!

许可证

本项目采用 Apache 2.0 许可。

致谢

此客户端基于官方 AuthZed SpiceDB API,并使用 Tonic 生成 gRPC 客户端。

依赖项

~9–18MB
~239K SLoC