การให้สิทธิ์ใช้งาน

ความสามารถ, ระดับใบอนุญาต, และบริการใบอนุญาต

หน้านี้เป็นเอกสารอ้างอิงเวลารันไทม์เกี่ยวกับวิธีที่ใบอนุญาตกำหนดพฤติกรรมของ Doconut: สิ่งที่แต่ละสถานะใบอนุญาตอนุญาต, วิธีที่ความสามารถได้รับการมอบให้, และวิธีตรวจสอบทั้งหมดจากโค้ด (สำหรับ การโหลด ใบอนุญาต, ดู เริ่มต้นใช้งาน → ตั้งค่าใบอนุญาต.)

สถานะใบอนุญาตและสิ่งที่ทำ

สถานะเปิดเอกสารได้หรือไม่ลายน้ำความสามารถ
ใบอนุญาตเต็ม (ชำระเงิน) (ภายในช่วงการสมัคร/อัปเดตของมัน)ใช่ไม่มีที่ซื้อไว้ (Has* flags)
ใบอนุญาตชั่วคราว (Developer/NFR — ใบอนุญาตประเมิน, ก่อนวันหมดอายุ)ใช่ไม่มีทั้งหมด — มอบแบบรวม (กระบวนการประเมิน)
หมดอายุ (ใบอนุญาตชั่วคราวที่เกินวันหมดอายุ, หรือการสมัครชำระเงินที่เกินวันต่ออายุ)ใช่ลายน้ำการประเมินไม่มีการมอบ
ไม่มีไฟล์ใบอนุญาตเลยใช่ลายน้ำการประเมินไม่มีการมอบ
พบแต่ถูกปฏิเสธ (ลายเซ็นไม่ถูกต้อง, ถูกดัดแปลง, อยู่ในรายการห้าม, หรือบิลด์ใหม่กว่าช่วงเวอร์ชันของใบอนุญาต)ไม่ — LicenseException บนการเปิดทุกครั้ง——

สองผลลัพธ์ที่ควรทำความเข้าใจ:

  • ไม่มีใบอนุญาตไม่ใช่ใบอนุญาตชั่วคราว. เมื่อไม่มีไฟล์ใบอนุญาต, หน้าเว็บจะแสดงลายน้ำและไม่มีความสามารถใด ๆ (การค้นหา, การอธิบาย, ปลั๊กอิน) ทำงาน. ประสบการณ์เต็มรูปแบบโดยไม่มีลายน้ำต้องการ ใบอนุญาตชั่วคราว จริง (รับหนึ่งใบ).
  • เฉพาะใบอนุญาตที่ถูกปฏิเสธเท่านั้นที่บล็อกการเปิด. การหมดอายุของปฏิทิน/การสมัครทำให้การแสดงผลเป็นลายน้ำ; แต่การปรับใช้บิลด์ ใหม่กว่ ช่วงเวอร์ชันของใบอนุญาตจะถูกปฏิเสธและ ล้มเหลวอย่างรวดเร็ว ด้วย LicenseException, ดังนั้นคุณจะจับได้ในขั้นตอนการปรับใช้ — ไม่ได้โดยการส่งออกลายน้ำโดยเงียบ. ข้อยกเว้นนั้น (จาก OpenDocumentAsync) จะบรรจุเหตุผลจาก License.RejectionMessage.

ความสามารถ

Doconut ควบคุมฟังก์ชันเสริมโดย ความสามารถ. ปัจจุบันนั้นคือปลั๊กอิน Converter และ DICOM ที่เลือกใช้พร้อมกับฟีเจอร์ในตัว Search และ Annotation, แต่ละอย่างมอบโดยใบอนุญาตของคุณ. ตัวดูพื้นฐานไม่ใช่ความสามารถ — เป็นเงื่อนไขเบื้องต้น, แสดงเป็น IsViewerLicensed:

csharp
bool viewerLicensed = lic.IsViewerLicensed; // non-TRIAL license present AND covering this build's version

ประตูเดียวที่ทั้ง pipeline ใช้คือ IsCapabilityGranted:

csharp
bool searchGranted = lic.IsCapabilityGranted(LicenseCapability.Search);

ตรรกะของมัน, คัดลอกจากการทำงานจริง: ใบอนุญาต Temporary ที่ใช้งานอยู่ (ไม่หมดอายุ) จะมอบ ทุก ความสามารถ — รวมถึงความสามารถที่ยังไม่มีแฟล็กการซื้อเฉพาะ; ใบอนุญาตที่ซื้อจริงจะมอบตามแฟล็ก Has* ของมันและเป็น default‑deny สำหรับสิ่งที่ไม่ได้แมป (ไฟล์ประเภท TRIAL เก่าเป็น ไม่ เป็นสิทธิ์ — ถือว่าไม่มีใบอนุญาต: มีลายน้ำ, ไม่มีการมอบใด ๆ).

ใบอนุญาตชั่วคราว

การค้นหาและการอธิบายปกติใช้ความสามารถที่มีอยู่โดยตรง.

ใบอนุญาตชั่วคราว (Developer/NFR) จะถูกทำเครื่องหมายด้วยแท็ก ExpiryNote และมีวันหมดอายุที่แน่นอน:

สมาชิกความหมาย
IsTemporaryมีแท็ก ExpiryNote ปรากฏ (การตรวจจับทำโดยการมีแท็ก — ไม่ตรงกับข้อความของโน้ต, เป็นแบบไดนามิก)
ExpiryNoteข้อความข้อมูลที่ฝังอยู่ในใบอนุญาต
LicenseExpiryวันหมดอายุที่แน่นอน (DateTime?)

ความหมายของวันหมดอายุแตกต่างตามระดับ: ใบอนุญาตชั่วคราวจะหมดอายุที่ LicenseExpiry เฉพาะวันที่ (หน้าต่างการสมัครจะถูกละเลย; ใบอนุญาตชั่วคราวที่ไม่มีวันที่จะถือว่าหมดอายุ, ปลอดภัย). ใบอนุญาตอื่น ๆ ทั้งหมดจะหมดอายุที่วันที่ของหน้าต่างการสมัคร/อัปเดต.

การอ้างอิง IDoconutLicenseService

Inject IDoconutLicenseService (namespace Doconut.Core.Interfaces; ลงทะเบียนเป็น singleton — ใบอนุญาตจะถูกแยกวิเคราะห์ครั้งเดียวที่การเริ่มต้น):

สมาชิกความหมาย
Licenseสแน็ปช็อตเต็มของ DoconutLicenseInfo (ด้านล่าง)
IsTrialไฟล์ประเภท TRIAL เก่า (ถือว่าไม่มีใบอนุญาต — ไม่ใช่สิทธิ์)
IsTemporary / ExpiryNote / LicenseExpiryตัวบ่งชี้ใบอนุญาตชั่วคราว
IsExpiredหมดอายุตามกฎระดับข้างต้น
IsVersionValidบิลด์นี้อยู่ในช่วงสนับสนุนของใบอนุญาต
IsViewerLicensedพบไฟล์ที่ไม่ใช่ TRIAL และ เวอร์ชันครอบคลุม — เงื่อนไขเบื้องต้น
IsCapabilityGranted(cap)ประตูความสามารถเดียว
HasSearch HasAnnotation HasConverter HasDicomปล่อยตามแฟล็กการซื้อของแต่ละความสามารถ — ใช้ IsCapabilityGranted เพื่อคำตอบที่รับรู้ใบอนุญาตชั่วคราว
IsValidForDomain(host)การครอบคลุมโฮสต์; ใบอนุญาต V4 ใช้ไวล์การ์ด *.*
LicenseRejectionReasonไม่ว่าง ⇒ การเปิดจะถูกบล็อกด้วยข้อความนี้

DoconutLicenseInfo เปิดเผยสแน็ปช็อตที่เป็นมิตรต่อการแสดงผลสำหรับแผงผู้ดูแล: Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, แฟล็ก Has*, ฟิลด์ใบอนุญาตชั่วคราว, และ 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,
}));

การตรวจสอบสุขภาพ

AddDoconut() ลงทะเบียนการตรวจสอบสุขภาพ "doconut" ที่รายงานสถานะใบอนุญาต/วันหมดอายุผ่านกลไกมาตรฐานของ ASP.NET Core:

csharp
app.MapHealthChecks("/health");

เชื่อมต่อเข้ากับระบบเฝ้าระวังของคุณและการสมัครที่กำลังจะหมดอายุจะกลายเป็นการแจ้งเตือนแทนการส่งตั๋วสนับสนุน.

การอัปเกรดเวอร์ชัน

ใบอนุญาตครอบคลุม ช่วงเวอร์ชัน. การอัปเดตแพคเกจ NuGet ไปยังบิลด์ ใหม่กว่ ช่วงนั้นทำให้ใบอนุญาตไม่ถูกต้องสำหรับบิลด์นี้: IsVersionValid กลายเป็น false และ การเปิดจะถูกบล็อก ด้วย LicenseException (เหตุผลอยู่ใน License.RejectionMessage) — ตั้งใจให้ล้มเหลวอย่างรวดเร็ว, เพื่อให้บิลด์ที่ล้าสมัยหรือไม่มีใบอนุญาตถูกจับที่การปรับใช้แทนการใส่ลายน้ำโดยเงียบในผลลัพธ์การผลิต. ต่ออายุการสมัคร, แทนที่ไฟล์ .lic, และรีสตาร์ทแอปพลิเคชันเพื่อให้ AddDoconut() โหลดใบอนุญาตใหม่.

หน้านี้เป็นประโยชน์หรือไม่?