مجوزدهی

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

این صفحه مرجع زمان اجرا برای نحوهٔ شکل‌گیری رفتار 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

دروازهٔ تک‌تکه‌ای که تمام خط لوله از آن استفاده می‌کند IsCapabilityGranted است:

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

منطق آن، همان‌طور که در پیاده‌سازی آمده: یک مجوز موقت فعال (غیرمنقضی) تمام قابلیت‌ها را اعطا می‌کند — حتی قابلیت‌هایی که هنوز پرچم خرید اختصاصی ندارند؛ یک مجوز خریداری‌شده واقعی فقط پرچم‌های Has* خود را اعطا می‌کند و برای هر چیز غیرنقشه‌برداری‌شده به‌صورت پیش‌فرض رد می‌شود. (یک فایل legacy نوع TRIAL حق‌دسترس نیست — به‌عنوان بدون مجوز در نظر گرفته می‌شود: واترمارک، هیچ‌چیزی اعطا نشده.)

مجوزهای موقت

جستجو و حاشیه‌نویسی معمولی از قابلیت‌های موجود خود استفاده می‌کنند.

مجوزهای موقت (Developer/NFR) با یک برچسب ExpiryNote علامت‌گذاری می‌شوند و تاریخ انقضای سخت‌گیرانه‌ای دارند:

عضومعنی
IsTemporaryوجود برچسب ExpiryNote (تشخیص فقط با وجود برچسب — متن برچسب پویاست)
ExpiryNoteمتن اطلاعاتی تعبیه‌شده در مجوز
LicenseExpiryتاریخ انقضای سخت‌گیرانه (DateTime?)

معنای انقضا بر حسب سطح متفاوت است: یک مجوز موقت فقط در تاریخ LicenseExpiry منقضی می‌شود (بازهٔ اشتراک نادیده گرفته می‌شود؛ یک مجوز موقت بدون تاریخ به‌عنوان منقضی در نظر گرفته می‌شود، حالت ایمن). تمام مجوزهای دیگر در تاریخ پایان بازهٔ اشتراک/به‌روزرسانی منقضی می‌شوند.

مرجع IDoconutLicenseService

IDoconutLicenseService را تزریق کنید (فضای‌نام Doconut.Core.Interfaces؛ به‌عنوان singleton ثبت می‌شود — مجوز یک‌بار در زمان راه‌اندازی تجزیه می‌شود):

عضومعنی
Licenseتصویر کامل DoconutLicenseInfo (در زیر)
IsTrialیک فایل legacy نوع TRIAL (به‌عنوان بدون مجوز در نظر گرفته می‌شود — نه حق‌دسترس)
IsTemporary / ExpiryNote / LicenseExpiryنشانگرهای مجوز موقت
IsExpiredمنقضی بر اساس قوانین سطوح بالا
IsVersionValidاین ساخت در بازهٔ پشتیبانی مجوز قرار دارد
IsViewerLicensedفایل غیر‑TRIAL یافت و نسخه پوشش داده شده — پیش‌نیاز پایه
IsCapabilityGranted(cap)دروازهٔ تک‌قابلیت
HasSearch HasAnnotation HasConverter HasDicomپرچم‌های خرید هر قابلیت — برای پاسخ آگاه به موقت از IsCapabilityGranted استفاده کنید
IsValidForDomain(host)پوشش دامنه؛ مجوزهای V4 از wildcard *.* استفاده می‌کنند
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() مجوز جدید را بارگذاری کند.

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