Licensiering

Funktioner, licenstier och licenstjänsten

Den här sidan är referensen vid körning för hur en licens formar Doconut:s beteende: vad varje licenstillstånd tillåter, hur funktioner beviljas och hur man inspekterar allt från kod. (För laddning av en licens, se Kom igång → Licensinställning.)

Licenstillstånd och vad de gör

TillståndÖppnar dokument?VattenstämpelFunktioner
Full (betald) licens (inom dess prenumerations-/uppdateringsfönster)JaIngenDe som köpts (Has*-flaggor)
Tillfällig licens (Utvecklare/NFR — evalueringslicensen, före dess utgångsdatum)JaIngenAlla — generellt beviljad (evalueringsflödet)
Utgången (en tillfällig licens som passerat sitt utgångsdatum, eller en betald prenumeration som passerat förnyelsedatumet)JaUtvärderingsvattensämpelIngen beviljad
Ingen licensfil allsJaUtvärderingsvattensämpelIngen beviljad
Hittad men avvisad (ogiltig signatur, manipulerad, svartlistad, eller en build nyare än licensens versionsfönster)Nej — LicenseException vid varje öppning——

Två konsekvenser som är värda att internalisera:

  • En saknad licens är inte en tillfällig licens. Utan licensfil visas sidor med vattenstämpel och ingen funktion (sökning, annotation, plugins) är aktiv. Den fullständiga, utan vattenstämpel upplevelsen kräver en faktisk Tillfällig licens (skaffa en).
  • Endast en avvisad licens hindrar öppning. Kalender-/prenumerationsutgång degraderar till rendering med vattenstämpel; men att distribuera en build nyare än licensens versionsfönster avvisas och misslyckas snabbt med en LicenseException, så du fångar den vid distribution — inte genom att tyst leverera vattenstämplat resultat. Undantaget (från OpenDocumentAsync) innehåller orsaken från License.RejectionMessage.

Funktioner

Doconut styr valfri funktionalitet med funktion. Idag är det de valfria Converter- och DICOM-pluginsen samt de inbyggda Search- och Annotation-funktionerna, var och en beviljad av din licens. Basvisaren är inte en funktion — den är förutsättningen, exponerad som IsViewerLicensed:

csharp
bool viewerLicensed = lic.IsViewerLicensed; // non-TRIAL license present AND covering this build's version

Den enda gate som hela pipeline använder är IsCapabilityGranted:

csharp
bool searchGranted = lic.IsCapabilityGranted(LicenseCapability.Search);

Dess logik, ordagrant från implementationen: en aktiv (icke-utgången) Tillfällig licens beviljar alla funktioner — inklusive funktioner som ännu inte har en dedikerad köpsflagga; en riktig köpt licens beviljar exakt sina Has*-flaggor och är default‑deny för allt som inte är mappat. (En äldre TRIAL‑typfil är inte en rättighet — den behandlas som olicensierad: vattenstämplad, inget beviljat.)

Tillfälliga licenser

Normal sökning och annotation använder sina befintliga funktioner direkt.

Tillfälliga (Utvecklare/NFR) licenser markeras med en ExpiryNote-tagg och har ett fast utgångsdatum:

MedlemBetydelse
IsTemporaryEn ExpiryNote-tagg är närvarande (detektering sker genom taggens närvaro — matcha aldrig notens text, den är dynamisk)
ExpiryNoteInformativ text inbäddad i licensen
LicenseExpiryDet fasta utgångsdatumet (DateTime?)

Utgångssemantiken skiljer sig per nivå: en tillfällig licens går ut på sitt LicenseExpiry endast datum (dess prenumerationsfönster ignoreras; en tillfällig licens utan datum behandlas som utgången, felsäker). Alla andra licenser går ut på sitt prenumerations-/uppdateringsfönster datum.

IDoconutLicenseService-referens

Injicera IDoconutLicenseService (namnrymd Doconut.Core.Interfaces; registrerad som singleton — licensen parsas en gång vid start):

MedlemBetydelse
LicenseFull DoconutLicenseInfo-snapshot (nedan)
IsTrialEn äldre TRIAL‑typfil (behandlas som olicensierad — inte en rättighet)
IsTemporary / ExpiryNote / LicenseExpiryMarkörer för tillfällig licens
IsExpiredUtgången enligt tier-reglerna ovan
IsVersionValidDenna build faller inom licensens supportfönster
IsViewerLicensedIcke-TRIAL-fil hittad och version täckt — grundförutsättning
IsCapabilityGranted(cap)Den enda funktionsgate
HasSearch HasAnnotation HasConverter HasDicomUtsläppta per-funktionsköpsflaggor — använd IsCapabilityGranted för svaret med tillfällig medvetenhet
IsValidForDomain(host)Värdadäckning; V4-licenser använder wildcard *.*
LicenseRejectionReasonEj tom ⇒ öppning blockeras med detta meddelande

DoconutLicenseInfo exponerar en displayvänlig snapshot för adminpaneler: Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, Has*-flaggorna, de tillfälliga licensfälten och RejectionMessage.

csharp
// Feature-flag your UI from the same source of truth the SDK uses
app.MapGet("/api/features", (IDoconutLicenseService lic) => Results.Ok(new
{
    viewer     = lic.IsViewerLicensed || lic.IsTemporary,
    search     = lic.IsCapabilityGranted(LicenseCapability.Search),
    annotation = lic.IsCapabilityGranted(LicenseCapability.Annotation),
    conversion = lic.HasConverter,
    dicom      = lic.HasDicom,
}));

Hälsokontroll

AddDoconut() registrerar en "doconut"-hälsokontroll som rapporterar licens-/utgångstillstånd via den standard ASP.NET Core-mekanismen:

csharp
app.MapHealthChecks("/health");

Koppla in den i din övervakning så blir en utgående prenumeration en varning istället för ett supportärende.

Versionsuppgraderingar

En licens täcker ett versionsfönster. Att uppdatera NuGet-paketet till en build nyare än det fönstret gör licensen ogiltig för denna build: IsVersionValid blir false och öppning blockeras med en LicenseException (orsaken finns i License.RejectionMessage) — avsiktligt fail-fast, så att en föråldrad eller olicensierad build fångas vid distribution snarare än att tyst vattenstämpla produktionsutdata. Förnya prenumerationen, ersätt .lic-filen och starta om applikationen så att AddDoconut() laddar den nya licensen.

Var den här sidan hjälpsam?