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: những gì mỗi trạng thái giấy phép cho phép, cách các khả năng được cấp, và cách kiểm tra tất cả từ mã nguồn. (Để tải một giấy phép, xem Cài đặt giấy phép.)
Các trạng thái giấy phép và những gì chúng làm
| 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ủ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 nước đánh giá | Không có gì được cấp |
| Không có tệp giấy phép | Có | Đánh dấu nước đánh giá | Không có gì được cấp |
| Đã tìm thấy nhưng bị từ chối (chữ ký không hợp lệ, bị giả mạo, bị liệt kê đ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 ghi nhớ:
- 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ó dấu nước 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ó 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 chặn việc mở. Ngày hết hạn lịch/đăng ký chuyển sang hiển thị có 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 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ó dấu nước. Ngoại lệ đó (từOpenDocumentAsync) mang lại lý do từLicense.RejectionMessage.
Khả năng
Doconut kiểm soát chức năng tùy chọn bằng capability. Hiện nay chúng là các plugin Converter và DICOM tùy chọn cộng với các tính năng Search và Annotation tích hợp, 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 capability — nó là điều kiện tiên quyết, được hiển thị dưới dạng IsViewerLicensed:
bool viewerLicensed = lic.IsViewerLicensed; // Có giấy phép non-TRIAL và bao phủ phiên bản của bản dựng nàyCổ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 tạm thời (không hết hạn) cấp mọi capability — bao gồm cả các capability chưa có cờ mua riêng; một giấy phép mua thực tế cấp đúng các cờ Has* và áp dụng mặc định‑từ chối đối với bất kỳ thứ nào chưa được ánh xạ. (Một tệp loại THỬ NGHIỆM cũ không phải là quyền lợi — nó được xử lý như không có giấy phép: có dấu nước, 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 hiện diện (phát hiện dựa trên sự hiện diện của thẻ — không bao giờ khớp với 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 chỉ 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
Giải quyết IDoconutLicenseService (namespace Doconut.Core.Interfaces) từ DoconutHost.Services. Nó là một singleton — giấy phép được phân tích một lần, trong DoconutHost.Initialize:
| Thành viên | Ý nghĩa |
|---|---|
License | Ảnh chụp nhanh đầy đủ DoconutLicenseInfo (bên dưới) |
IsTrial | Tệp loại THỬ NGHIỆM 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 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 khả năng duy nhất |
HasSearch HasAnnotation HasConverter HasDicom | Các cờ mua theo capability được phát hành — sử dụng IsCapabilityGranted cho câu trả lời nhận thức tạm thời |
IsValidForDomain(host) | Phạm vi host; 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 hiển thị ảnh chụp nhanh thân thiện với giao diện 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.
// GET /Features - feature-flag UI của bạn từ cùng nguồn dữ liệu thực tế mà SDK sử dụng
public ActionResult Index()
{
var lic = Doconut.DoconutHost.Services.GetRequiredService<IDoconutLicenseService>();
return Json(new
{
viewer = lic.IsViewerLicensed || lic.IsTemporary,
search = lic.IsCapabilityGranted(LicenseCapability.Search),
annotation = lic.IsCapabilityGranted(LicenseCapability.Annotation),
conversion = lic.HasConverter,
dicom = lic.HasDicom,
}, JsonRequestBehavior.AllowGet);
}Kiểm tra sức khỏe
Doconut đăng ký một kiểm tra sức khỏe "doconut" báo cáo trạng thái giấy phép. Classic ASP.NET không có endpoint sức khỏe riêng, vì vậy hãy mở nó từ một controller:
// GET /Health - Doconut đăng ký một kiểm tra sức khỏe "doconut" báo cáo trạng thái giấy phép:
// Khỏe (hợp lệ), Giảm (trial hoặc không có tệp giấy phép), Không khỏe (đã hết hạn).
public async Task<ActionResult> Index()
{
var health = Doconut.DoconutHost.Services.GetRequiredService<HealthCheckService>();
HealthReport report = await health.CheckHealthAsync();
Response.StatusCode = report.Status == HealthStatus.Unhealthy ? 503 : 200;
return Content(report.Status.ToString(), "text/plain");
}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 một cảnh báo thay vì một phiếu hỗ trợ. Xem DoconutHost để biết các giá trị trạng thái.
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 với một LicenseException (lý do nằm trong License.RejectionMessage) — cố ý fail‑fast, vì vậy một bản dựng cũ hoặc không có giấy phép sẽ bị bắt tại thời điểm triển khai thay vì âm thầm đánh dấu nước đầu ra sản xuất. Gia hạn đăng ký, thay thế .lic trong wwwroot, và tái khởi động pool ứng dụng để DoconutHost.Initialize tải giấy phép mới.
Trang này có hữu ích không?