Cấp phép

Các tính năng, các cấp phép, và dịch vụ cấp phép

Trang này là tài liệu tham chiếu thời gian chạy về cách một giấy phép định hình hành vi của Doconut: những gì mỗi trạng thái giấy phép cho phép, cách các tính năng được cấp, và cách kiểm tra tất cả chúng từ mã. (Đối với tải một giấy phép, xem Hướng dẫn bắt đầu → Cài đặt giấy phép.)

Các trạng thái giấy phép và chức năng của chúng

Trạng tháiMở tài liệu?Đánh dấu nướcCác tính năng
Giấy phép đầy đủ (đã trả phí) (trong cửa sổ đăng ký/cập nhật)KhôngCác mục đã mua (Has* flags)
Giấy phép tạm thời (Developer/NFR — giấy phép đánh giá, trước ngày hết hạn)KhôngTất cả — cấp toàn bộ (đường ống đánh giá)
Đã hết hạn (giấy phép tạm thời đã qua ngày hết hạn, hoặc đăng ký trả phí đã qua ngày gia hạn)Đánh dấu nước đánh giáKhông có gì được cấp
Không có tệp giấy phép nàoĐánh dấu nước đánh giáKhông có gì được cấp
Được tìm thấy nhưng bị từ chối (chữ ký không hợp lệ, bị giả mạo, bị đưa vào danh sách đen, hoặc bản dựng mới hơn cửa sổ phiên bản của giấy phép)Không — LicenseException trên mỗi lần mở

Hai hậu quả đáng lưu ý:

  • Một giấy phép thiếu không phải là giấy phép tạm thời. Khi không có tệp giấy phép, các trang sẽ hiển thị có đánh dấu nước và không có tính năng nào (tìm kiếm, chú thích, plugin) hoạt động. Trải nghiệm đầy đủ tính năng, không có đánh dấu nước yêu cầu một Giấy phép tạm thời thực tế (lấy một).
  • Chỉ một giấy phép bị từ chối mới ngăn việc mở. Hết hạn lịch/đăng ký chỉ làm giảm xuống việc hiển thị có đánh dấu nước; nhưng triển khai một bản dựng mới hơn cửa sổ phiên bản của giấy phép sẽ bị từ chối và thất bại nhanh với một LicenseException, vì vậy bạn sẽ bắt được nó khi triển khai — không phải bằng cách lặng lẽ phát hành đầu ra có đánh dấu nước. Ngoại lệ đó (từ OpenDocumentAsync) mang lại lý do từ License.RejectionMessage.

Các tính năng

Doconut kiểm soát chức năng tùy chọn bằng công năng. Hiện nay, đó là các plugin ConverterDICOM có thể bật cộng với các tính năng tích hợp SearchAnnotation, mỗi tính năng được cấp bởi giấy phép của bạn. Trình xem cơ bản không phải là một công năng — nó là điều kiện tiên quyết, được biểu thị bằng IsViewerLicensed:

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

Cổng duy nhất mà toàn bộ pipeline sử dụng là IsCapabilityGranted:

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

Logic của nó, sao chép nguyên văn từ triển khai: một giấy phép Temporary (không hết hạn) đang hoạt động sẽ cấp mọi công năng — bao gồm cả các công năng chưa có cờ mua riêng; một giấy phép đã mua thực tế sẽ cấp chính xác các cờ Has* của nó và mặc định từ chối bất kỳ công năng nào chưa được ánh xạ. (Một tệp kiểu TRIAL cũ không phải là một quyền lợi — nó được xử lý như không có giấy phép: có đánh dấu nước, không có gì được cấp.)

Giấy phép tạm thời

Tìm kiếm và Chú thích bình thường sử dụng các công năng hiện có của chúng một cách trực tiếp.

Giấy phép tạm thời (Developer/NFR) được đánh dấu bằng thẻ ExpiryNote và có ngày hết hạn cố định:

Thành viênÝ nghĩa
IsTemporaryThẻ ExpiryNote có mặt (phát hiện dựa trên sự tồn tại của thẻ — không bao giờ so khớp nội dung ghi chú, nó động)
ExpiryNoteVăn bản thông tin được nhúng trong giấy phép
LicenseExpiryNgày hết hạn cố định (DateTime?)

Ngữ nghĩa hết hạn khác nhau theo cấp: một giấy phép tạm thời hết hạn vào ngày LicenseExpiry (cửa sổ đăng ký của nó bị bỏ qua; một giấy phép tạm thời thiếu ngày sẽ được coi là đã hết hạn, an toàn). Mọi giấy phép khác hết hạn vào ngày cửa sổ đăng ký/cập nhật của nó.

Tham chiếu IDoconutLicenseService

Tiêm IDoconutLicenseService (namespace Doconut.Core.Interfaces; đăng ký dưới dạng singleton — giấy phép được phân tích một lần khi khởi động):

Thành viênÝ nghĩa
LicenseẢnh chụp đầy đủ DoconutLicenseInfo (bên dưới)
IsTrialTệp kiểu TRIAL cũ (được xử lý như không có giấy phép — không phải là quyền lợi)
IsTemporary / ExpiryNote / LicenseExpiryDấu hiệu giấy phép tạm thời
IsExpiredĐã hết hạn theo các quy tắc cấp ở trên
IsVersionValidBản dựng này nằm trong cửa sổ hỗ trợ của giấy phép
IsViewerLicensedTệp không phải TRIAL được tìm thấy phiên bản được bao phủ — điều kiện tiên quyết cơ bản
IsCapabilityGranted(cap)Cổng công năng duy nhất
HasSearch HasAnnotation HasConverter HasDicomCác cờ mua riêng cho mỗi công năng — sử dụng IsCapabilityGranted để có câu trả lời có tính đến tạm thời
IsValidForDomain(host)Bao phủ máy chủ; giấy phép V4 sử dụng ký tự đại diện *.*
LicenseRejectionReasonKhông rỗng ⇒ việc mở bị chặn với thông báo này

DoconutLicenseInfo cung cấp ảnh chụp thân thiện với giao diện hiển thị cho các bảng quản trị: Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, các cờ Has*, các trường giấy phép tạm thời, và 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,
}));

Kiểm tra sức khỏe

AddDoconut() đăng ký một kiểm tra sức khỏe "doconut" báo cáo trạng thái giấy phép/hết hạn thông qua cơ chế chuẩn của ASP.NET Core:

csharp
app.MapHealthChecks("/health");

Kết nối nó vào hệ thống giám sát của bạn và một đăng ký sắp hết hạn sẽ trở thành cảnh báo thay vì phiếu hỗ trợ.

Nâng cấp phiên bản

Một giấy phép bao phủ một cửa sổ phiên bản. Cập nhật gói NuGet lên một bản dựng mới hơn cửa sổ đó làm cho giấy phép không hợp lệ cho bản dựng này: IsVersionValid chuyển thành falseviệc mở bị chặn bằng một LicenseException (lý do nằm trong License.RejectionMessage) — cố ý thất bại nhanh, để một bản dựng lỗi thời hoặc không có giấy phép được phát hiện khi triển khai thay vì lặng lẽ đánh dấu nước đầu ra sản xuất. Gia hạn đăng ký, thay thế file .lic, và khởi động lại ứng dụng để AddDoconut() tải giấy phép mới.

Trang này có hữu ích không?