2 个版本
0.1.1 | 2024 年 8 月 10 日 |
---|---|
0.1.0 | 2024 年 8 月 3 日 |
591 在 网络编程
每月 310 次下载
用于 spicedb-client
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