Authorization for SaaS teams whose permissions
stopped being simple.
Add tenant-aware roles, feature actions, per-user overrides, and API-based permission checks without turning your codebase into scattered if-statements.
Built for B2B SaaS teams adding RBAC, tenant permissions, and customer-specific access rules.
Authorization as a Service. Without scattered permission logic.
Staging beta: create a test account and protect one non-critical permission flow first.
Authorization breaks quietly. Until it doesn't.
Most SaaS teams start with simple role checks. Then customers ask for tenant-specific permissions, exceptions, auditability, and rules that no longer fit cleanly in app code.
The start
- if user.role == "admin"
- A few feature flags
- One customer, one rule
- Permission checks hidden in handlers
Then reality hits
- Tenant-specific permissions
- Per-user exceptions
- Enterprise access requests
- No clear reason why access was allowed
The hidden cost
- Developers add conditionals
- Permissions become hard to test
- Support cannot explain access issues
- Security reviews become stressful
One check before the action.
Keep authorization decisions out of scattered application code. Call Thauth before the protected action runs.
A check is one authorization decision, for example: "Can user_123 refund an invoice in tenant_acme?"
{
"allowed": false,
"reason": "default_deny"
}const decision = await thauth.check({
subject: "user_123",
tenant: "acme",
feature: "billing",
action: "refund"
})
if (!decision.allowed) {
throw new ForbiddenError(decision.reason)
}A simple, explicit authorization model.
Model permissions the way your SaaS actually works: tenants, features, actions, roles, subjects, and overrides.
Every decision is explainable: who asked, in which tenant, for which feature/action, and why it was allowed or denied. Read the authorization model docs.
Explicit deny
Deny overrides win first, so critical restrictions cannot be accidentally bypassed.
Explicit allow
Allow overrides handle special cases without creating one-off roles for every exception.
Role permission
Normal access comes from roles assigned to subjects within a project and tenant context.
Default deny
If nothing matches, access is denied.
No policy language required. No graph model required. No infra team required.
For teams stuck between hardcoded RBAC and heavyweight policy engines.
Thauth sits between "just add another role check" and adopting a full policy-engine platform before your team is ready. Review the API overview.
Too simple
- Roles hardcoded in app code
- Permissions scattered across handlers
- Customer exceptions become patches
- Nobody owns the permission model
Thauth.dev
- Tenant-aware roles
- Feature/action permissions
- Per-user allow/deny overrides
- API checks with decision reasons
- Project-scoped API keys
- Check logs for visibility
Too complex
- Policy languages slow the team down
- Graph models are overkill early on
- Infra burden exceeds the problem
- Harder to explain to product/support teams
Define. Assign. Check.
Define your model in the dashboard, assign access rules, then call Thauth before protected actions.
1
Define features and actions
Describe what your app protects, then attach actions to it. Examples: billing:refund, reports:view, secrets:read.
2
Assign roles and overrides
Give subjects roles per tenant, then add explicit allow/deny exceptions when needed.
3
Check access from your app
Call the API or SDK before the protected action runs. Thauth returns allow/deny with a reason.
The core flow is implemented: dashboard configuration, API keys, runtime checks, check logs, SDKs, and staging deployment.
Pricing based on authorization checks, not seats.
Start free, then grow based on the number of authorization decisions your apps make.
Free
$0 /month
For evaluation, prototypes, and staging experiments.
- Staging experiments
- Prototypes
- Local testing
- Core roles, subjects, and decision API
Best for trying the model before production rollout.
Starter
$49 /month
For small SaaS teams adding real authorization.
- First staging integration
- Small production apps
- Overrides and batch checks
- Basic check logs
Recommended for most SaaS teams moving from hardcoded checks.
Growth
$149 /month
For growing SaaS teams with multiple tenants.
- Production workloads
- Multiple tenants
- Higher throughput
- 30-day audit retention
Built for teams whose authorization layer is already on the customer path.
Scale
$399 /month
For serious authorization workloads.
- Higher check volume
- Advanced limits and log retention
- 90-day audit retention
- Priority support
For platforms where authorization is part of the core request path at high volume.
Usage model
What counts as a check
A check is one authorization decision, for example: "Can user_123 perform action X in tenant Y?"
- Monthly plans include a check volume
- Batch requests count each decision inside the batch
- Usage warnings appear at 80%, 100%, and 120%
- Usage is tracked so you can understand authorization load before upgrading
Usage resets monthly. Checks above your plan are tracked for upgrade planning. See how authorization checks work.
Enterprise
Custom contract
For custom contracts, dedicated support, security/legal review, and higher limits.
- Custom limits
- Dedicated support path
- Security/legal review
- Higher limits
Tell us your expected volume and compliance constraints and we will scope the rollout with you.
Prefer email? Talk to us directly.Designed so authorization stays inspectable.
Authorization infrastructure needs more than a clean API. It needs safe defaults, visible decisions, and clear operational boundaries.
Dashboard safety
The dashboard is server-rendered through a BFF. Browser sessions do not directly call internal admin APIs, and backend admin tokens are not exposed in the network tab.
Read security docsBackend-enforced ownership
Account and project ownership are enforced by backend middleware. Cross-account access attempts are rejected with 403 and monitored.
Review boundariesClear decision behavior
Deny overrides win first, unmatched requests default to deny, and check logs help explain authorization outcomes.
Review modelOperational visibility
Request logs, failed authorization attempts, 403 ownership failures, and runtime behavior are monitored through the observability stack.
Read security docsLegal readiness
Terms, privacy, acceptable use, DPA, and security documentation are prepared for SaaS buyers.
Review legal docsSimple beta infrastructure
Thauth currently runs on an intentionally simple VPS deployment with Docker Compose, Traefik, Cloudflare DNS, daily backups, and vertical scaling first.
Review operationsTry Thauth where permission bugs hurt least first: staging.
Add Thauth to one non-critical permission flow, validate the model, then decide what deserves production traffic.
Read the docs