مجوزدهی

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

این صفحه مرجع زمان اجرا برای نحوهٔ شکل‌گیری رفتار 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) را از DoconutHost.Services حل کنید. این سرویس یک تک‌نمونه است — مجوز یک بار در DoconutHost.Initialize تجزیه می‌شود:

عضومعنی
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
// GET /Features - feature-flag your UI from the same source of truth the SDK uses
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);
}

بررسی سلامت

Doconut یک بررسی سلامت "doconut" ثبت می‌کند که وضعیت مجوز را گزارش می‌دهد. ASP.NET کلاسیک نقطهٔ پایانی سلامت خود را ندارد، بنابراین آن را از یک کنترلر در دسترس بگذارید:

csharp
// GET /Health - Doconut registers a "doconut" health check that reports the license state:
// Healthy (valid), Degraded (trial or no license file), Unhealthy (expired).
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");
}

آن را به سیستم مانیتورینگ خود متصل کنید تا یک اشتراک منقضی‌شده به جای یک تیکت پشتیبانی، یک هشدار شود. برای مقادیر وضعیت به DoconutHost مراجعه کنید.

به‌روزرسانی نسخه‌ها

یک مجوز یک پنجرهٔ نسخه را پوشش می‌دهد. به‌روزرسانی بسته NuGet به یک ساخت جدیدتر از آن پنجره، مجوز را برای این ساخت نامعتبر می‌کند: IsVersionValid به false تبدیل می‌شود و باز کردن مسدود می‌شود با LicenseException (دلیل در License.RejectionMessage است) — به‌صورت عمدی برای شکست سریع، تا یک ساخت منسوخ یا بدون مجوز در زمان استقرار شناسایی شود نه اینکه به‌صورت بی‌صدا خروجی تولیدی را علامت‌آب‌دار کند. اشتراک را تمدید کنید، فایل .lic در wwwroot را جایگزین کنید و استخر برنامه را بازچرخانی کنید تا DoconutHost.Initialize مجوز جدید را بارگذاری کند.

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