Licence

Fonctionnalités, niveaux de licence et le service de licence

Cette page est la référence d'exécution sur la façon dont une licence façonne le comportement de Doconut : ce que chaque état de licence autorise, comment les capacités sont accordées, et comment inspecter tout cela depuis le code. (Pour charger une licence, voir Démarrage → Configuration de la licence.)

États de licence et ce qu'ils font

ÉtatOuvre les documents ?FiligraneCapacités
Licence complète (payée) (dans sa fenêtre d'abonnement/mise à jour)OuiAucunCelles achetées (Has* flags)
Licence temporaire (Développeur/NFR — la licence d'évaluation, avant sa date d'expiration)OuiAucunToutes — octroi global (l'entonnoir d'évaluation)
Expirée (une licence temporaire passée sa date d'expiration, ou un abonnement payant passé sa date de renouvellement)OuiFiligrane d'évaluationAucun accordé
Aucun fichier de licenceOuiFiligrane d'évaluationAucun accordé
Trouvé mais rejeté (signature invalide, altéré, sur liste noire, ou une version plus récente que la fenêtre de version de la licence)Non — LicenseException à chaque ouverture

Deux conséquences à retenir :

  • Une licence manquante n'est pas une licence temporaire. Sans fichier de licence, les pages s'affichent avec un filigrane et aucune capacité (recherche, annotation, plugins) n'est active. L'expérience complète, sans filigrane, nécessite une Licence temporaire (obtenir un).
  • Seule une licence rejetée bloque l'ouverture. L'expiration du calendrier/abonnement se traduit par un rendu filigrané ; mais déployer une version plus récente que la fenêtre de version de la licence est rejeté et échoue rapidement avec une LicenseException, ainsi vous le détectez lors du déploiement — et non en diffusant silencieusement une sortie filigranée. Cette exception (provenant de OpenDocumentAsync) contient la raison provenant de License.RejectionMessage.

Capacités

Doconut contrôle les fonctionnalités optionnelles par capacité. Aujourd'hui, il s'agit des plugins Converter et DICOM en option ainsi que des fonctionnalités intégrées Search et Annotation, chacune accordée par votre licence. Le visualiseur de base n'est pas une capacité — c'est le prérequis, exposé sous la forme IsViewerLicensed :

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

Le seul filtre que l'ensemble du pipeline utilise est IsCapabilityGranted :

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

Sa logique, mot pour mot depuis l'implémentation : une licence Temporaire active (non expirée) accorde toutes les capacités — y compris celles qui n'ont pas encore de drapeau d'achat dédié ; une vraie licence achetée accorde exactement ses drapeaux Has* et est défaut‑refus pour tout ce qui n'est pas mappé. (Un fichier de type TRIAL hérité n'est pas un droit — il est traité comme non licencié : filigrané, aucune capacité accordée.)

Licences temporaires

Les recherches et annotations normales utilisent leurs capacités existantes directement.

Les licences temporaires (Développeur/NFR) sont marquées par une balise ExpiryNote et comportent une date d'expiration stricte :

MembreSignification
IsTemporaryUne balise ExpiryNote est présente (la détection se fait par la présence de la balise — ne jamais comparer le texte de la note, il est dynamique)
ExpiryNoteTexte informatif intégré dans la licence
LicenseExpiryLa date d'expiration stricte (DateTime?)

La sémantique d'expiration diffère selon le niveau : une licence temporaire expire à la seule date de son LicenseExpiry (sa fenêtre d'abonnement est ignorée ; une licence temporaire sans date est considérée comme expirée, par mesure de sécurité). Toutes les autres licences expirent à la date de leur fenêtre d'abonnement/mise à jour.

Référence IDoconutLicenseService

Injectez IDoconutLicenseService (espace de noms Doconut.Core.Interfaces ; enregistré en tant que singleton — la licence est analysée une fois au démarrage) :

MembreSignification
LicenseInstantané complet DoconutLicenseInfo (ci‑dessous)
IsTrialUn fichier de type TRIAL hérité (traité comme non licencié — pas un droit)
IsTemporary / ExpiryNote / LicenseExpiryMarqueurs de licence temporaire
IsExpiredExpiré selon les règles de niveau ci‑dessus
IsVersionValidCette version se situe dans la fenêtre de support de la licence
IsViewerLicensedFichier non-TRIAL trouvé et version couverte — prérequis de base
IsCapabilityGranted(cap)Le seul filtre de capacité
HasSearch HasAnnotation HasConverter HasDicomLibérés selon les drapeaux d'achat par capacité — utilisez IsCapabilityGranted pour la réponse tenant compte des temporaires
IsValidForDomain(host)Couverture d'hôte ; les licences V4 utilisent le joker *.*
LicenseRejectionReasonNon vide ⇒ l'ouverture est bloquée avec ce message

DoconutLicenseInfo expose l'instantané convivial pour les panneaux d'administration : Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, les drapeaux Has*, les champs de licence temporaire, et 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,
}));

Vérification de santé

AddDoconut() enregistre une vérification de santé "doconut" qui rapporte l'état de la licence/expiration via le mécanisme standard d'ASP.NET Core :

csharp
app.MapHealthChecks("/health");

Intégrez‑la à votre surveillance et un abonnement qui expire devient une alerte plutôt qu'un ticket de support.

Mises à jour de version

Une licence couvre une fenêtre de version. Mettre à jour le package NuGet vers une version plus récente que cette fenêtre rend la licence invalide pour cette version : IsVersionValid devient false et l'ouverture est bloquée avec une LicenseException (la raison se trouve dans License.RejectionMessage) — échoue rapidement de façon délibérée, afin qu'une version obsolète ou non licenciée soit détectée lors du déploiement plutôt que de filigraner silencieusement la production. Renouvelez l'abonnement, remplacez le fichier .lic, et redémarrez l'application afin que AddDoconut() charge la nouvelle licence.

Cette page vous a-t-elle été utile ?