مجوزدهی

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

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

مجوزهای موقت

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

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

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