armature-tenancy

Crates.ioarmature-tenancy
lib.rsarmature-tenancy
version0.1.2
created_at2025-12-27 02:02:25.584151+00
updated_at2025-12-30 22:33:45.896099+00
descriptionMulti-tenancy support for Armature applications
homepagehttps://pegasusheavy.github.io/armature
repositoryhttps://github.com/pegasusheavy/armature
max_upload_size
id2006571
size143,938
Joseph R. Quinn (quinnjr)

documentation

README

armature-tenancy

Multi-tenancy support for the Armature framework.

Features

  • Tenant Isolation - Data separation per tenant
  • Multiple Strategies - Schema, database, row-level
  • Tenant Resolution - Subdomain, header, path
  • Middleware - Automatic tenant context
  • Database Routing - Per-tenant connections

Installation

[dependencies]
armature-tenancy = "0.1"

Quick Start

use armature_tenancy::{TenantMiddleware, TenantResolver};

let tenant_middleware = TenantMiddleware::new(
    TenantResolver::subdomain()  // tenant.example.com
);

let app = Application::new()
    .with_middleware(tenant_middleware)
    .get("/data", |req| async move {
        let tenant = req.tenant()?;
        let data = fetch_tenant_data(&tenant.id).await?;
        Ok(HttpResponse::ok().json(data))
    });

Tenant Resolution

Subdomain

TenantResolver::subdomain() // tenant.example.com

Header

TenantResolver::header("X-Tenant-ID")

Path

TenantResolver::path_prefix() // /tenant/api/...

Database Strategies

Schema Isolation

let pool = TenantPool::schema_per_tenant(base_pool);

Database Isolation

let pool = TenantPool::database_per_tenant(connections);

Row-Level

let pool = TenantPool::row_level(pool, "tenant_id");

License

MIT OR Apache-2.0

Commit count: 0

cargo fmt