#访问控制 #授权 #安全 #SDK #开放 #可扩展 #客户端

bin+lib cerbos

Rust SDK 用于与Cerbos交互:一个开源核心、语言无关、可扩展的授权解决方案,通过编写应用程序资源的上下文感知访问控制策略,使用户权限和授权易于实现和管理。

6 个版本 (3 个破坏性更新)

0.4.5 2024年4月15日
0.4.2 2023年11月27日
0.4.1 2023年7月10日
0.3.0 2023年6月7日
0.1.0 2022年5月2日

#1218网络编程

Apache-2.0

440KB
6.5K SLoC

Cerbos Rust SDK

Rust 客户端库用于 Cerbos:一个开源核心、语言无关、可扩展的授权解决方案,通过编写应用程序资源的上下文感知访问控制策略,使用户权限和授权易于实现和管理。

使用方法

cargo add cerbos

客户端可以通过实例化 CerbosAsyncClientCerbosSyncClient 分别以异步或同步方式使用。

use cerbos::sdk::attr::attr;
use cerbos::sdk::model::{Principal, Resource};
use cerbos::sdk::{CerbosAsyncClient, CerbosClientOptions, CerbosEndpoint, Result};

#[tokio::main]
async fn main() -> Result<()> {
    let opt = CerbosClientOptions::new(CerbosEndpoint::HostPort("localhost", 3593));
    let mut client = CerbosAsyncClient::new(opt).await?;

    let principal = Principal::new("alice", ["employee"])
        .with_policy_version("20210210")
        .with_attributes([
            attr("department", "marketing"),
            attr("geography", "GB"),
            attr("team", "design"),
        ]);

    let resource = Resource::new("XX125", "leave_request")
        .with_policy_version("20210210")
        .with_attributes([
            attr("department", "marketing"),
            attr("geography", "GB"),
            attr("team", "design"),
            attr("owner", "alice"),
            attr("approved", true),
            attr("id", "XX125"),
        ]);

    let resp = client
        .is_allowed("view:public", principal, resource, None)
        .await?;

    println!("Allowed={:?}", resp);

    Ok(())
}

开发

运行测试

cerbos run --set=storage.disk.directory=resources/store -- cargo test

依赖关系

~10–20MB
~272K SLoC