Lisensi
Kemampuan, tingkatan lisensi, dan layanan lisensi
Halaman ini adalah referensi runtime tentang bagaimana sebuah lisensi membentuk perilaku Doconut: apa yang diizinkan oleh setiap status lisensi, bagaimana kemampuan diberikan, dan bagaimana memeriksa semuanya dari kode. (Untuk memuat sebuah lisensi, lihat Pengaturan Lisensi.)
Status lisensi dan apa yang mereka lakukan
| Status | Membuka dokumen? | Tanda air | Kemampuan |
|---|---|---|---|
| Lisensi Penuh (berbayar) (dalam jendela langganan/pembaruan) | Ya | Tidak ada | Yang dibeli (Has* flags) |
| Lisensi Sementara (Developer/NFR — lisensi evaluasi, sebelum tanggal kedaluwarsa) | Ya | Tidak ada | Semua — pemberian blanket (alur evaluasi) |
| Kedaluwarsa (lisensi sementara setelah tanggal kedaluwarsa, atau langganan berbayar setelah tanggal perpanjangan) | Ya | Tanda air evaluasi | Tidak ada yang diberikan |
| Tidak ada berkas lisensi sama sekali | Ya | Tanda air evaluasi | Tidak 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 penting untuk dipahami:
- Lisensi yang hilang bukanlah lisensi sementara. Tanpa berkas lisensi, halaman ditampilkan dengan tanda air dan tidak ada kemampuan (pencarian, anotasi, plugin) yang aktif. Pengalaman penuh fitur 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; tetapi 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 (dariOpenDocumentAsync) membawa alasan dariLicense.RejectionMessage.
Kemampuan
Doconut mengendalikan fungsionalitas opsional dengan kemampuan. Saat ini yang tersedia adalah plugin Converter dan DICOM yang dapat di‑opt‑in serta fitur bawaan Search dan Annotation, masing‑masing diberikan oleh lisensi Anda. Penampil dasar bukanlah sebuah kemampuan — ia adalah prasyarat, yang ditampilkan sebagai IsViewerLicensed:
bool viewerLicensed = lic.IsViewerLicensed; // non-TRIAL license present AND covering this build's versionGerbang tunggal yang digunakan seluruh pipeline adalah IsCapabilityGranted:
bool searchGranted = lic.IsCapabilityGranted(LicenseCapability.Search);Logikanya, persis dari implementasi: sebuah lisensi Sementara yang aktif (tidak kedaluwarsa) memberikan setiap kemampuan — termasuk kemampuan yang belum memiliki flag pembelian khusus; sebuah lisensi berbayar yang nyata memberikan tepat flag 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 (Developer/NFR) ditandai dengan tag ExpiryNote dan memiliki tanggal kedaluwarsa keras:
| Anggota | Makna |
|---|---|
IsTemporary | Tag ExpiryNote ada (deteksi berdasarkan keberadaan tag — tidak pernah mencocokkan teks catatan, bersifat dinamis) |
ExpiryNote | Teks informasional yang disematkan dalam lisensi |
LicenseExpiry | Tanggal kedaluwarsa keras (DateTime?) |
Semantik kedaluwarsa berbeda per tingkatan: lisensi sementara kedaluwarsa pada tanggal LicenseExpiry‑nya saja (jendela langganannya diabaikan; lisensi sementara yang tidak memiliki tanggal diperlakukan sebagai kedaluwarsa, fail‑safe). Semua lisensi lain kedaluwarsa pada tanggal jendela langganan/pembaruan mereka.
Referensi IDoconutLicenseService
Resolusi IDoconutLicenseService (namespace Doconut.Core.Interfaces) dari DoconutHost.Services. Ini adalah singleton — lisensi diparsir sekali, dalam DoconutHost.Initialize:
| Anggota | Makna |
|---|---|
License | Snapshot lengkap DoconutLicenseInfo (lihat di bawah) |
IsTrial | Berkas tipe TRIAL warisan (diperlakukan sebagai tidak berlisensi — bukan hak) |
IsTemporary / ExpiryNote / LicenseExpiry | Penanda lisensi sementara |
IsExpired | Kedaluwarsa menurut aturan tingkatan di atas |
IsVersionValid | Build ini berada dalam jendela dukungan lisensi |
IsViewerLicensed | Berkas non‑TRIAL ditemukan dan versi tercakup — prasyarat dasar |
IsCapabilityGranted(cap) | Gerbang kemampuan tunggal |
HasSearch HasAnnotation HasConverter HasDicom | Flag pembelian per‑kemampuan yang dirilis — gunakan IsCapabilityGranted untuk jawaban yang memperhitungkan lisensi sementara |
IsValidForDomain(host) | Cakupan host; lisensi V4 menggunakan wildcard *.* |
LicenseRejectionReason | Tidak kosong ⇒ pembukaan diblokir dengan pesan ini |
DoconutLicenseInfo menampilkan snapshot yang ramah‑pengguna untuk panel admin: Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, flag Has*, bidang lisensi sementara, dan RejectionMessage.
// GET /Features - feature-flag your UI from the same source of truth the SDK uses
public ActionResult Index()
{
var lic = Doconut.DoconutHost.Services.GetRequiredService<IDoconutLicenseService>();
return Json(new
{
viewer = lic.IsViewerLicensed || lic.IsTemporary,
search = lic.IsCapabilityGranted(LicenseCapability.Search),
annotation = lic.IsCapabilityGranted(LicenseCapability.Annotation),
conversion = lic.HasConverter,
dicom = lic.HasDicom,
}, JsonRequestBehavior.AllowGet);
}Pemeriksaan kesehatan
Doconut mendaftarkan pemeriksaan kesehatan "doconut" yang melaporkan status lisensi. ASP.NET klasik tidak memiliki endpoint kesehatan sendiri, jadi publikasikan lewat controller:
// GET /Health - Doconut registers a "doconut" health check that reports the license state:
// Healthy (valid), Degraded (trial or no license file), Unhealthy (expired).
public async Task<ActionResult> Index()
{
var health = Doconut.DoconutHost.Services.GetRequiredService<HealthCheckService>();
HealthReport report = await health.CheckHealthAsync();
Response.StatusCode = report.Status == HealthStatus.Unhealthy ? 503 : 200;
return Content(report.Status.ToString(), "text/plain");
}Sambungkan ke sistem pemantauan Anda dan langganan yang akan kedaluwarsa menjadi peringatan alih‑alih tiket dukungan. Lihat DoconutHost untuk nilai‑nilai status.
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) — gagal cepat secara sengaja, sehingga build yang usang atau tidak berlisensi tertangkap saat penyebaran, bukan secara diam‑diam menandai air output produksi. Perpanjang langganan, ganti berkas .lic di wwwroot, dan daur ulang pool aplikasi sehingga DoconutHost.Initialize memuat lisensi baru.
Apakah halaman ini membantu?