الترخيص

القدرات، مستويات الرخصة، وخدمة الرخصة

هذه الصفحة هي مرجع وقت التشغيل لكيفية تشكيل الرخصة لسلوك Doconut: ما يسمح به كل حالة رخصة، كيف تُمنح القدرات، وكيفية فحص كل ذلك من الشيفرة. (لـ تحميل رخصة، راجع البدء → إعداد الرخصة.)

حالات الرخصة وما تقوم به

الحالةيفتح المستندات؟علامة مائيةالقدرات
رخصة كاملة (مدفوعة) (ضمن نافذة الاشتراك/التحديث الخاصة بها)نعملا شيءالتي تم شراؤها (Has* flags)
رخصة مؤقتة (المطور/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

البوابة الوحيدة التي يستخدمها كامل خط الأنابيب هي IsCapabilityGranted:

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

منطقه، حرفيًا من التنفيذ: رخصة مؤقتة نشطة (غير منتهية) تمنح كل قدرة — بما في ذلك القدرات التي لا تملك علم شراء مخصص بعد؛ رخصة مدفوعة حقيقية تمنح بالضبط أعلام Has* الخاصة بها وتكون الرفض الافتراضي لأي شيء غير مُعرّف. (ملف TRIAL قديم ليس استحقاقًا — يُعامل كغير مرخص: مائي، لا شيء ممنوح.)

الرخص المؤقتة

تُ标ًّى الرخص المؤقتة (المطور/غير تجاري) بواسطة علامة ExpiryNote وتحمل تاريخ انتهاء صلب:

العضوالمعنى
IsTemporaryوجود علامة ExpiryNote (الكشف يتم بوجود العلامة — لا يتم مطابقة نص الملاحظة، فهي ديناميكية)
ExpiryNoteنص معلوماتي مضمّن في الرخصة
LicenseExpiryتاريخ الانتهاء الصلب (DateTime?)

تختلف دلالات الانتهاء حسب الفئة: تنتهي الرخصة المؤقتة في تاريخ LicenseExpiry فقط (يُتجاهل نافذة الاشتراك الخاصة بها؛ رخصة مؤقتة بدون تاريخ تُعامل كمنتهية، آمنة). كل رخصة أخرى تنتهي في تاريخ نافذة الاشتراك/التحديث الخاصة بها.

مرجع IDoconutLicenseService

قم بحقن IDoconutLicenseService (المسار Doconut.Core.Interfaces; مسجل ككائن مفرد — تُحلل الرخصة مرة واحدة عند بدء التشغيل):

العضوالمعنى
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() بتحميل الرخصة الجديدة.

هل كانت هذه الصفحة مفيدة؟