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ái | Mở tài liệu? | Đánh dấu nước | Các tính năng |
|---|---|---|---|
| Giấy phép đầy đủ (đã trả phí) (trong cửa sổ đăng ký/cập nhật) | Có | Không | Cá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) | Có | Không | Tấ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) | Có | Đá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 | Có | Đá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 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 công năng — nó là điều kiện tiên quyết, được biểu thị bằ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) đ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 |
|---|---|
IsTemporary | Thẻ 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) |
ExpiryNote | Văn bản thông tin được 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 | Tệ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 / LicenseExpiry | Dấ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 |
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 công năng duy nhất |
HasSearch HasAnnotation HasConverter HasDicom | Cá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 *.* |
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 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?