ライセンス

機能、ライセンス層、そしてライセンスサービス

このページは、ライセンスが Doconut の動作をどのように形作るかについての実行時リファレンスです。各ライセンス状態で何が許可されるか、機能がどのように付与されるか、そしてコードからそれらすべてを検査する方法を説明します。(ライセンスのロード については、Getting Started → License Setup を参照してください。)

ライセンス状態とその機能

状態文書を開くかウォーターマーク機能
フル(有料)ライセンス(サブスクリプション/更新ウィンドウ内)はいなし購入されたもの(Has* フラグ)
一時ライセンス(Developer/NFR — 評価ライセンス、期限日以前)はいなしすべて — 包括的付与(評価ファンネル)
期限切れ(期限日を過ぎた一時ライセンス、または更新日を過ぎた有料サブスクリプション)はい評価用ウォーターマーク付与なし
ライセンスファイルが全くないはい評価用ウォーターマーク付与なし
見つかったが拒否された(無効な署名、改ざん、ブラックリスト登録、またはライセンスのバージョンウィンドウより新しいビルド)いいえ — LicenseException がすべてのオープンで発生

内部で把握すべき2つの結果:

  • ライセンスがないことは一時ライセンスではありません。 ライセンスファイルがない場合、ページはウォーターマーク付きで表示され、機能(検索、注釈、プラグイン)は有効になりません。フル機能でウォーターマークのない体験には、実際の Temporary license が必要です(取得する)。
  • 拒否されたライセンスだけがオープンをブロックします。 カレンダー/サブスクリプションの期限切れはウォーターマーク付き表示に劣化しますが、ビルドがライセンスのバージョンウィンドウ より新しい 場合は拒否され、LicenseException速やかに失敗 します。そのためデプロイ時に捕捉でき、ウォーターマーク付き出力を黙って出荷することはありません。その例外(OpenDocumentAsync から)は License.RejectionMessage の理由を保持しています。

機能

Doconut はオプション機能を capability で制御します。現在、オプトインの ConverterDICOM プラグイン、そして組み込みの SearchAnnotation 機能があり、いずれもライセンスで付与されます。ベースビューアは機能ではなく、前提条件であり、IsViewerLicensed として表れます:

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

パイプライン全体で使用される唯一のゲートは IsCapabilityGranted です:

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

そのロジックは実装からそのままです:有効(期限切れでない)Temporary ライセンスは すべての 機能を付与します — まだ専用の購入フラグがない機能も含みます。実際に購入されたライセンスは Has* フラグだけを付与し、未マッピングのものは デフォルトで拒否 されます。(レガシーな TRIAL タイプのファイルは 権利ではなく、未ライセンスとして扱われ、ウォーターマークが付き、何も付与されません。)

一時ライセンス

通常の Search と Annotation は既存の機能を直接使用します。

一時(Developer/NFR)ライセンスは ExpiryNote タグでマークされ、固定の期限日を持ちます:

メンバー意味
IsTemporaryExpiryNote タグが存在する(検出はタグの有無で行い、ノートのテキストは一致させない、動的です)
ExpiryNoteライセンスに埋め込まれた情報テキスト
LicenseExpiry固定の期限日(DateTime?

期限の意味は層によって異なります:一時ライセンスは LicenseExpiry日付のみ で期限切れになります(サブスクリプションウィンドウは無視されます;日付がない一時ライセンスは期限切れとして扱われ、フェイルセーフになります)。他のすべてのライセンスはサブスクリプション/更新ウィンドウの日付で期限切れになります。

IDoconutLicenseService リファレンス

IDoconutLicenseService を注入します(名前空間 Doconut.Core.Interfaces;シングルトンとして登録 — ライセンスは起動時に一度だけ解析されます):

メンバー意味
License完全な DoconutLicenseInfo スナップショット(以下)
IsTrialレガシーな TRIAL タイプのファイル(未ライセンスとして扱われ、権利ではありません)
IsTemporary / ExpiryNote / LicenseExpiry一時ライセンスのマーカー
IsExpired上記の層ルールに基づく期限切れ
IsVersionValidこのビルドはライセンスのサポートウィンドウ内にある
IsViewerLicensedTRIAL ファイルが見つかり、バージョンがカバーされている — 基本前提条件
IsCapabilityGranted(cap)唯一の機能ゲート
HasSearch HasAnnotation HasConverter HasDicom機能ごとの購入フラグでリリース — 一時ライセンス対応の回答には IsCapabilityGranted を使用してください
IsValidForDomain(host)ホストカバレッジ;V4 ライセンスはワイルドカード *.* を使用
LicenseRejectionReason空でない場合 ⇒ このメッセージでオープンがブロックされる

DoconutLicenseInfo は管理パネル向けの表示フレンドリーなスナップショットを公開します:OwnerEmailLicenseTypeDomainIsLicenseFileFoundIsVersionValidIsTrialIsExpiredHas* フラグ、一時ライセンスフィールド、そして 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,
}));

ヘルスチェック

AddDoconut() は標準の ASP.NET Core メカニズムを通じてライセンス/期限状態を報告する "doconut" ヘルスチェックを登録します:

csharp
app.MapHealthChecks("/health");

これを監視に組み込めば、期限切れのサブスクリプションはサポートチケットではなくアラートになります。

バージョンアップグレード

ライセンスは バージョンウィンドウ をカバーします。そのウィンドウより 新しい ビルドに NuGet パッケージを更新すると、ライセンスはこのビルドに対して無効となり、IsVersionValidfalse になり、LicenseExceptionオープンがブロック されます(理由は License.RejectionMessage にあります)— 故意に速やかに失敗させることで、古いまたは未ライセンスのビルドがデプロイ時に捕捉され、生産出力が黙ってウォーターマークされることを防ぎます。サブスクリプションを更新し、.lic を置き換え、アプリケーションを再起動して AddDoconut() が新しいライセンスを読み込むようにします。

このページは役に立ちましたか?