rs-tenant 0.4.0

Multi-tenant RBAC authorization engine for Rust
Documentation
use futures::executor::block_on;
use rs_tenant::{
    AccessDecision, Permission, TenantId,
    platform::{
        MemoryPlatformSource, PlatformEngineBuilder, PlatformGrantScope, PlatformPrincipalId,
        PlatformPrincipalStatus, PlatformRoleId, PlatformSubject, TenantDataAccessRequest,
    },
};

fn main() -> rs_tenant::Result<()> {
    block_on(async {
        let principal = PlatformPrincipalId::parse("platform_support")?;
        let role = PlatformRoleId::parse("tenant_support")?;
        let tenant = TenantId::parse("tenant_demo")?;
        let permission = Permission::parse("tenant/order:read")?;

        let source = MemoryPlatformSource::new();
        source.set_principal_status(principal.clone(), PlatformPrincipalStatus::Active);
        source.add_role_assignment(
            principal.clone(),
            role.clone(),
            PlatformGrantScope::tenants(vec![tenant.clone()])?,
        );
        source.add_role_permission(role, permission.clone());

        let engine = PlatformEngineBuilder::new(source).build();
        let decision = engine
            .can_access_tenant(TenantDataAccessRequest {
                subject: PlatformSubject::new(principal),
                permission,
                tenant,
            })
            .await?;

        assert_eq!(decision, AccessDecision::Allow);
        Ok(())
    })
}