Licencování

Funkce, úrovně licencí a licenční služba

Tato stránka je referencí za běhu, jak licence formuje chování Doconut: co každý stav licence umožňuje, jak jsou funkce uděleny a jak je lze zkontrolovat z kódu. (Pro načítání licence viz Začínáme → Nastavení licence.)

Stavy licence a co dělají

StavOtevírá dokumenty?VodoznakFunkce
Plná (placená) licence (v rámci jejího období předplatného/aktualizace)AnoŽádnýTy zakoupené (Has* flags)
Dočasná licence (Developer/NFR — evaluační licence, před datem vypršení)AnoŽádnýVše — plošné udělení (evaluační kanál)
Vypršela (dočasná licence po datu vypršení nebo placené předplatné po datu obnovení)AnoEvaluační vodoznakŽádné nepřiděleno
Žádný licenční soubor vůbecAnoEvaluační vodoznakŽádné nepřiděleno
Nalezeno, ale odmítnuto (neplatný podpis, poškozený, na černé listině, nebo sestavení novější než verzní okno licence)Ne — LicenseException při každém otevření——

Dvě důsledky, které stojí za internalizaci:

  • Chybějící licence není dočasná licence. Bez licenčního souboru se stránky zobrazují s vodoznakem a žádná funkce (vyhledávání, anotace, pluginy) není aktivní. Plnohodnotný, bez vodoznaku, zážitek vyžaduje skutečnou Dočasnou licenci (získat jednu).
  • Pouze odmítnutá licence blokuje otevírání. Vypršení kalendáře/předplatného vede k vykreslování s vodoznakem; ale nasazení sestavení novějšího než verzní okno licence je odmítnuto a rychle selže s LicenseException, takže jej zachytíte při nasazení — ne tiše odesíláním výstupu s vodoznakem. Tato výjimka (z OpenDocumentAsync) nese důvod z License.RejectionMessage.

Funkce

Doconut řídí volitelnou funkcionalitu pomocí funkce. Dnes jsou to volitelné pluginy Converter a DICOM plus vestavěné funkce Search a Annotation, každá udělena vaší licencí. Základní prohlížeč není funkcí — je předpokladem, vystupujícím jako IsViewerLicensed:

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

Jedna brána, kterou používá celý pipeline, je IsCapabilityGranted:

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

Jeho logika, doslovně z implementace: aktivní (nevypršená) Dočasná licence uděluje každou funkci — včetně funkcí, které ještě nemají dedikovaný nákupní příznak; skutečná zakoupená licence uděluje přesně své Has* příznaky a je defaultně zamítnutá pro vše, co není mapováno. (Legacy soubor typu TRIAL není oprávněním — je považován za nelicencovaný: vodoznak, nic nepřiděleno.)

Dočasné licence

Normální vyhledávání a anotace používají své existující funkce přímo.

Dočasné (Developer/NFR) licence jsou označeny tagem ExpiryNote a nesou pevné datum vypršení:

ČlenVýznam
IsTemporaryTag ExpiryNote je přítomen (detekce probíhá přítomností tagu — nikdy neporovnávat text poznámky, je dynamický)
ExpiryNoteInformační text vložený do licence
LicenseExpiryPevné datum vypršení (DateTime?)

Semantika vypršení se liší podle úrovně: dočasná licence vyprší pouze k datu LicenseExpiry (pouze datum) (její okno předplatného se ignoruje; dočasná licence bez data je považována za vypršenou, bezpečnostní režim). Každá jiná licence vyprší k datu svého okna předplatného/aktualizace.

Referenční dokumentace IDoconutLicenseService

Injektujte IDoconutLicenseService (namespace Doconut.Core.Interfaces; registrovaný jako singleton — licence je parsována jednou při spuštění):

ČlenVýznam
LicenseKompletní snímek DoconutLicenseInfo (níže)
IsTrialLegacy soubor typu TRIAL (považován za nelicencovaný — není oprávněním)
IsTemporary / ExpiryNote / LicenseExpiryZnačky dočasné licence
IsExpiredVypršela podle výše uvedených pravidel úrovně
IsVersionValidToto sestavení spadá do podpůrného okna licence
IsViewerLicensedNalezen soubor, který není TRIAL, a verze je pokryta — základní předpoklad
IsCapabilityGranted(cap)Jediná brána funkce
HasSearch HasAnnotation HasConverter HasDicomUvolněno podle nákupních příznaků pro každou funkci — použijte IsCapabilityGranted pro odpověď zohledňující dočasnost
IsValidForDomain(host)Pokrytí hosta; licence V4 používají zástupný znak *.*
LicenseRejectionReasonNeprázdné ⇒ otevírání je blokováno touto zprávou

DoconutLicenseInfo poskytuje uživatelsky přívětivý snímek pro administrativní panely: Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, příznaky Has*, pole dočasné licence a 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,
}));

Kontrola zdraví

AddDoconut() registruje health check "doconut", který hlásí stav licence/vypršení prostřednictvím standardního mechanismu ASP.NET Core:

csharp
app.MapHealthChecks("/health");

Zapojte jej do svého monitoringu a vypršející předplatné se stane upozorněním místo ticketu podpory.

Aktualizace verzí

Licence pokrývá verzní okno. Aktualizace balíčku NuGet na sestavení novější než toto okno způsobí, že licence je pro toto sestavení neplatná: IsVersionValid se nastaví na false a otevírání je blokováno s LicenseException (důvod je v License.RejectionMessage) — úmyslně selhává rychle, takže zastaralé nebo nelicencované sestavení je zachyceno při nasazení místo tiše vodoznakovaného produkčního výstupu. Obnovte předplatné, nahraďte .lic a restartujte aplikaci, aby AddDoconut() načetl novou licenci.

Byla tato stránka užitečná?