Cấp phép

Các khả 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: mỗi trạng thái giấy phép cho phép gì, cách các khả năng được cấp, và cách kiểm tra tất cả từ mã. (Đối với tải một giấy phép, xem 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ấuKhả năng
Giấy phép đầy đủ (trả phí) (trong cửa sổ đăng ký/cập nhật của nó)KhôngNhững cái đã 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ộ (kênh đá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 đánh giáKhông có gì được cấp
Không có tệp giấy phép nàoĐánh dấu đá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 hiển thị có đánh dấu và không có khả 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 yêu cầu một Giấy phép tạm thời (lấy một).
  • Chỉ một giấy phép bị từ chối mới ngăn mở. Hết hạn lịch/đăng ký sẽ chuyển sang hiển thị có đánh dấu; 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 âm thầm phát hành đầu ra có đánh dấu. Ngoại lệ đó (từ OpenDocumentAsync) mang lại lý do từ License.RejectionMessage.

Các khả năng

Doconut kiểm soát chức năng tùy chọn bằng khả 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 khả năng — nó là điều kiện tiên quyết, được hiển thị dưới dạ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) hoạt động sẽ cấp mọi khả năng — bao gồm cả các khả 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 cho bất kỳ thứ nào chưa được ánh xạ. (Một tệp loại TRIAL cũ không phải là quyền lợi — nó được xử lý như không có giấy phép: có đánh dấu, không có gì được cấp.)

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

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 bằng việc có thẻ — không bao giờ khớp với nội dung ghi chú, nó động)
ExpiryNoteVăn bản thông tin 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)
IsTrialMột tệp loại TRIAL cũ (được xử lý như không có giấy phép — không phải là quyền lợi)
IsTemporary / ExpiryNote / LicenseExpiryCác dấu hiệu giấy phép tạm thời
IsExpiredHết hạn theo 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 duy nhất cho khả năng
HasSearch HasAnnotation HasConverter HasDicomĐược phát hành theo cờ mua từng khả năng — sử dụng IsCapabilityGranted để có câu trả lời nhận thức tạm thời
IsValidForDomain(host)Phạm vi 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 cũ hoặc không có giấy phép được phát hiện khi triển khai thay vì âm thầm đánh dấu đầ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?