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ái | Mở tài liệu? | Đánh dấu | Khả năng |
|---|---|---|---|
| Giấy phép đầy đủ (trả phí) (trong cửa sổ đăng ký/cập nhật của nó) | Có | Không | Nhữ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) | Có | Không | Tấ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) | Có | Đánh dấu đánh giá | Không có gì được cấp |
| Không có tệp giấy phép nào | Có | Đá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 Converter và DICOM có thể bật, cùng với các tính năng tích hợp Search và Annotation, 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:
bool viewerLicensed = lic.IsViewerLicensed; // non-TRIAL license present AND covering this build's versionCổng duy nhất mà toàn bộ pipeline sử dụng là IsCapabilityGranted:
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 |
|---|---|
IsTemporary | Thẻ 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) |
ExpiryNote | Văn bản thông tin nhúng trong giấy phép |
LicenseExpiry | Ngà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) |
IsTrial | Mộ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 / LicenseExpiry | Các dấu hiệu giấy phép tạm thời |
IsExpired | Hết hạn theo quy tắc cấp độ ở trên |
IsVersionValid | Bản dựng này nằm trong cửa sổ hỗ trợ của giấy phép |
IsViewerLicensed | Tệp không phải TRIAL được tìm thấy và 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 *.* |
LicenseRejectionReason | Khô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.
// 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:
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 false và việ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?