Cấp phép
Các khả năng, cấp độ giấy phép và dịch vụ giấy 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 nước | Khả năng |
|---|---|---|---|
| Giấy phép đầy đủ (trả phí) (trong cửa sổ đăng ký/cập nhật) | 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 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, nằm trong 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ó khả năng nào (tìm kiếm, chú thích, plugin) được kích hoạt. 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 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 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 Search và Annotation tích hợp sẵn, 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ó, 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 khả năng — bao gồm cả những khả năng chưa có cờ mua riêng; một giấy phép mua thực tế sẽ cấp đúng các cờ Has* của nó và có mặc định từ chối đối với bất kỳ khả năng 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 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 khả năng hiện có của chúng 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 | Có thẻ ExpiryNote (phát hiện dựa trên sự tồn tại của thẻ — không bao giờ khớp với nội dung của 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 xử lý 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 cửa sổ đăng ký/cập nhật.
Tham chiếu IDoconutLicenseService
Tiêm IDoconutLicenseService (không gian tên Doconut.Core.Interfaces; được đă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ác cờ mua theo khả năng được phát hành — sử dụng IsCapabilityGranted để có câu trả lời có tính đến 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 điều khiển 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?