مجوزدهی

قابلیت‌ها، سطوح مجوز و سرویس مجوز

این صفحه مرجع زمان اجرا برای نحوهٔ شکل‌گیری رفتار Doconut توسط یک مجوز است: هر وضعیت مجوز چه چیزی را اجازه می‌دهد، چگونه قابلیت‌ها اعطا می‌شوند و چگونه می‌توان همهٔ این‌ها را از کد بررسی کرد. (برای بارگذاری یک مجوز، به شروع کار → تنظیم مجوز مراجعه کنید.)

وضعیت‌های مجوز و عملکرد آن‌ها

وضعیتاسناد را باز می‌کند؟واترمارکقابلیت‌ها
مجوز کامل (پرداختی) (درون بازهٔ اشتراک/به‌روزرسانی آن)بلههیچ‌کدامآنهایی که خریداری شده‌اند (Has* پرچم‌ها)
مجوز موقت (توسعه‌دهنده/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 قدیمی نیست یک حق‌الامتیاز — به‌عنوان بدون مجوز در نظر گرفته می‌شود: واترمارک‌دار، هیچ چیزی اعطا نمی‌شود.)

مجوزهای موقت

مجوزهای موقت (توسعه‌دهنده/NFR) با برچسب 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() مجوز جدید را بارگذاری کند.

آیا این صفحه مفید بود؟