Sylin.Koan.Tenancy.Web
1.0.86
dotnet add package Sylin.Koan.Tenancy.Web --version 1.0.86
NuGet\Install-Package Sylin.Koan.Tenancy.Web -Version 1.0.86
<PackageReference Include="Sylin.Koan.Tenancy.Web" Version="1.0.86" />
<PackageVersion Include="Sylin.Koan.Tenancy.Web" Version="1.0.86" />
<PackageReference Include="Sylin.Koan.Tenancy.Web" />
paket add Sylin.Koan.Tenancy.Web --version 1.0.86
#r "nuget: Sylin.Koan.Tenancy.Web, 1.0.86"
#:package Sylin.Koan.Tenancy.Web@1.0.86
#addin nuget:?package=Sylin.Koan.Tenancy.Web&version=1.0.86
#tool nuget:?package=Sylin.Koan.Tenancy.Web&version=1.0.86
Sylin.Koan.Tenancy.Web
A reference-mounted operator UI and API for the supported Tenancy control plane: tenant registry, membership seats, and administration audit.
Install
dotnet add package Sylin.Koan.Tenancy.Web
Keep the existing bootstrap:
builder.Services.AddKoan();
The reference adds controllers and the embedded UI automatically. Start the application and open /tenancy; the
operator API is mounted at /api/tenancy/admin.
Meaningful use
An admitted operator can:
- list, inspect, create, and rename tenant registry rows;
- grant or replace a known subject's tenant roles through one deterministic membership seat;
- revoke a membership; and
- inspect the newest administration audit entries.
Equivalent grants converge to Membership.KeyFor(tenantId, identityId). Reserved host operator roles are rejected
before the seat is saved. The administration service records every completed supported mutation.
Exposure and authority
Exposure answers where the surface exists; authority answers who can operate it. They are deliberately separate:
{
"Koan": {
"Tenancy": {
"Console": {
"Exposure": {
"Hosts": [ "ops.example.com" ],
"RequireHeader": "X-Koan-Console"
},
"Grant": {
"Operators": [ "operator-subject-id" ],
"Role": "koan:tenancy-operator"
}
}
}
}
}
A failed exposure condition returns 404 before routing. It is never authority. Closed posture requires the configured
operator identity or host role and returns 403 otherwise. Development is open by default; set
RequireLoopbackForOpenPosture when a development host can receive remote traffic.
Startup reporting shows the routes, resolved posture, exposure conditions, configured operator count, and audit page
size. AuditPageSize defaults to 100 and MaxAuditPageSize to 500.
Boundaries
IdentityIdis a subject key. This package does not reference or validate an Identity provider; the optional Identity Tenancy bridge enforces active durable Identity when a membership is used for request scope.- Invitation/delivery/acceptance, tenant suspension, product-data erase, operations jobs, and server-side act-as are intentionally absent until they can provide complete guarantees.
- Registry and audit writes are ordered Entity operations, not a cross-provider transaction or immutable ledger.
- Direct writes to the underlying control-plane Entities bypass the administration service's validation and audit.
See TECHNICAL.md and the public tenancy guide.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.AspNetCore.JsonPatch (>= 10.0.10)
- Microsoft.AspNetCore.Mvc.NewtonsoftJson (>= 10.0.10)
- Newtonsoft.Json (>= 13.0.4)
- Sylin.Koan.Identity.Tenancy (>= 1.0.74 && < 2.0.0)
- Sylin.Koan.Tenancy (>= 1.0.46 && < 2.0.0)
- Sylin.Koan.Web (>= 1.0.70 && < 2.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.86 | 90 | 9/13/2026 |
| 1.0.81 | 89 | 9/13/2026 |
| 1.0.78 | 84 | 9/13/2026 |
| 1.0.75 | 83 | 9/12/2026 |
| 1.0.70 | 85 | 9/12/2026 |
| 1.0.66 | 108 | 9/10/2026 |
| 1.0.60 | 93 | 9/10/2026 |
| 1.0.54 | 97 | 9/9/2026 |
| 1.0.48 | 95 | 9/9/2026 |
| 1.0.43 | 87 | 9/9/2026 |
| 1.0.40 | 84 | 9/9/2026 |
| 1.0.33 | 96 | 9/9/2026 |
| 1.0.29 | 106 | 9/9/2026 |
| 1.0.22 | 103 | 9/5/2026 |
| 1.0.21 | 110 | 8/30/2026 |
| 1.0.20 | 101 | 8/30/2026 |
| 1.0.19 | 101 | 8/28/2026 |
| 1.0.18 | 94 | 8/28/2026 |
| 1.0.17 | 93 | 8/28/2026 |
| 1.0.16 | 93 | 8/28/2026 |