Lisensi

Kemampuan, tingkatan lisensi, dan layanan lisensi

Halaman ini adalah referensi waktu jalan tentang bagaimana sebuah lisensi membentuk perilaku Doconut: apa yang diizinkan oleh setiap status lisensi, bagaimana kemampuan diberikan, dan cara memeriksa semuanya dari kode. (Untuk memuat lisensi, lihat Memulai → Pengaturan Lisensi.)

Status Lisensi dan Apa yang Dilakukan

StatusMembuka dokumen?Tanda airKemampuan
Lisensi Penuh (berbayar) (dalam jendela langganan/pembaruan)YaTidak adaYang dibeli (Has* flags)
Lisensi Sementara (Pengembang/NFR — lisensi evaluasi, sebelum tanggal kedaluwarsanya)YaTidak adaSemua — pemberian menyeluruh (alur evaluasi)
Kadaluarsa (lisensi sementara yang melewati tanggal kedaluwarsanya, atau langganan berbayar yang melewati tanggal perpanjangannya)YaTanda air evaluasiTidak ada yang diberikan
Tidak ada berkas lisensi sama sekaliYaTanda air evaluasiTidak ada yang diberikan
Ditemukan tetapi ditolak (tanda tangan tidak valid, dimanipulasi, masuk daftar hitam, atau build lebih baru daripada jendela versi lisensi)Tidak — LicenseException pada setiap pembukaan

Dua konsekuensi yang patut diinternalisasi:

  • Lisensi yang hilang bukan lisensi sementara. Tanpa berkas lisensi, halaman ditampilkan dengan tanda air dan tidak ada kemampuan (pencarian, anotasi, plugin) yang aktif. Pengalaman lengkap tanpa tanda air memerlukan Lisensi Sementara yang sebenarnya (dapatkan satu).
  • Hanya lisensi yang ditolak yang memblokir pembukaan. Kedaluwarsa kalender/langganan menurunkan tampilan menjadi ber‑tanda air; namun menyebarkan build lebih baru daripada jendela versi lisensi akan ditolak dan gagal cepat dengan LicenseException, sehingga Anda menanganinya saat penyebaran — bukan dengan diam‑diam mengirimkan output ber‑tanda air. Pengecualian itu (dari OpenDocumentAsync) membawa alasan dari License.RejectionMessage.

Kemampuan

Doconut mengendalikan fungsionalitas opsional dengan kemampuan. Saat ini yang ada adalah plugin Converter dan DICOM yang dapat dipilih serta fitur bawaan Search dan Annotation, masing‑masing diberikan oleh lisensi Anda. Penampil dasar bukanlah sebuah kemampuan — ia adalah prasyarat, yang muncul sebagai IsViewerLicensed:

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

Gerbang tunggal yang digunakan seluruh pipeline adalah IsCapabilityGranted:

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

Logikanya, persis dari implementasi: lisensi Sementara yang aktif (tidak kedaluwarsa) memberikan setiap kemampuan — termasuk kemampuan yang belum memiliki bendera pembelian khusus; lisensi berbayar yang sebenarnya memberikan tepat bendera Has*‑nya dan bersifat default‑deny untuk apa pun yang tidak dipetakan. (Berkas tipe TRIAL warisan bukan hak — ia diperlakukan sebagai tidak berlisensi: ber‑tanda air, tidak ada yang diberikan.)

Lisensi Sementara

Lisensi sementara (Pengembang/NFR) ditandai dengan tag ExpiryNote dan memiliki tanggal kedaluwarsa keras:

AnggotaMakna
IsTemporaryTag ExpiryNote ada (deteksi berdasarkan keberadaan tag — tidak pernah mencocokkan teks catatan, bersifat dinamis)
ExpiryNoteTeks informatif yang disematkan dalam lisensi
LicenseExpiryTanggal kedaluwarsa keras (DateTime?)

Semantik kedaluwarsa berbeda menurut tingkatan: lisensi sementara kedaluwarsa pada tanggal LicenseExpiry saja (jendela langganannya diabaikan; lisensi sementara yang tidak memiliki tanggal diperlakukan sebagai kedaluwarsa, aman). Semua lisensi lain kedaluwarsa pada tanggal jendela langganan/pembaruan.

Referensi IDoconutLicenseService

Sisipkan IDoconutLicenseService (namespace Doconut.Core.Interfaces; terdaftar sebagai singleton — lisensi diurai sekali saat startup):

AnggotaMakna
LicenseSnapshot lengkap DoconutLicenseInfo (di bawah)
IsTrialBerkas tipe TRIAL warisan (diperlakukan sebagai tidak berlisensi — bukan hak)
IsTemporary / ExpiryNote / LicenseExpiryPenanda lisensi sementara
IsExpiredKedaluwarsa sesuai aturan tingkatan di atas
IsVersionValidBuild ini berada dalam jendela dukungan lisensi
IsViewerLicensedBerkas non-TRIAL ditemukan dan versi tercakup — prasyarat dasar
IsCapabilityGranted(cap)Gerbang kemampuan tunggal
HasSearch HasAnnotation HasConverter HasDicomDikeluarkan berdasarkan bendera pembelian per‑kemampuan — gunakan IsCapabilityGranted untuk jawaban yang memperhitungkan lisensi sementara
IsValidForDomain(host)Cakupan host; lisensi V4 menggunakan wildcard *.*
LicenseRejectionReasonTidak kosong ⇒ pembukaan diblokir dengan pesan ini

DoconutLicenseInfo menampilkan snapshot yang ramah tampilan untuk panel admin: Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, bendera Has*, bidang lisensi sementara, dan 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,
}));

Pemeriksaan Kesehatan

AddDoconut() mendaftarkan pemeriksaan kesehatan "doconut" yang melaporkan status lisensi/kedaluwarsa melalui mekanisme standar ASP.NET Core:

csharp
app.MapHealthChecks("/health");

Sambungkan ke sistem pemantauan Anda dan langganan yang akan kedaluwarsa menjadi peringatan alih‑alih tiket dukungan.

Peningkatan Versi

Sebuah lisensi mencakup jendela versi. Memperbarui paket NuGet ke build lebih baru daripada jendela tersebut membuat lisensi tidak valid untuk build ini: IsVersionValid menjadi false dan pembukaan diblokir dengan LicenseException (alasan ada di License.RejectionMessage) — sengaja gagal cepat, sehingga build yang usang atau tidak berlisensi terdeteksi saat penyebaran alih‑alih secara diam‑diam menandai air output produksi. Perpanjang langganan, ganti berkas .lic, dan mulai ulang aplikasi sehingga AddDoconut() memuat lisensi baru.

Apakah halaman ini membantu?