Skip to content

Multi-Tenant SaaS Platform

Manage configuration for a SaaS platform with organizations, tenants, and projects.

from hrcp import ResourceTree, PropagationMode, get_value

tree = ResourceTree(root_name="platform")

# Platform-wide defaults
tree.root.set_attribute("timeout", 30)
tree.root.set_attribute("max_requests_per_minute", 1000)
tree.root.set_attribute("features", {
    "dark_mode": False,
    "beta_features": False,
    "ai_assist": False
})

# Enterprise tenant with custom limits
tree.create("/platform/acme-corp", attributes={
    "tier": "enterprise",
    "max_requests_per_minute": 10000,
    "features": {
        "ai_assist": True
    }
})

# Projects inherit from tenant
tree.create("/platform/acme-corp/webapp")
tree.create("/platform/acme-corp/mobile-api")
tree.create("/platform/acme-corp/analytics", attributes={
    "timeout": 120  # Analytics needs more time
})

# Free tier tenant
tree.create("/platform/small-startup", attributes={
    "tier": "free",
    "max_requests_per_minute": 100
})
tree.create("/platform/small-startup/app")

# Query configuration
analytics = tree.get("/platform/acme-corp/analytics")

timeout = get_value(analytics, "timeout", PropagationMode.INHERIT)
# 120 (local override)

rate_limit = get_value(analytics, "max_requests_per_minute", PropagationMode.INHERIT)
# 10000 (from tenant)

features = get_value(analytics, "features", PropagationMode.MERGE)
# {"dark_mode": False, "beta_features": False, "ai_assist": True}
# ai_assist merged from tenant, others from platform

Key Patterns

  • Platform defaults at root level apply to all tenants
  • Tenant overrides customize limits and features per customer
  • Project inheritance means less configuration to manage
  • MERGE for feature flags allows partial overrides