مجوزدهی
قابلیتها، سطوح مجوز و سرویس مجوز
این صفحه مرجع زمان اجرا برای نحوهٔ شکلگیری رفتار Doconut توسط یک مجوز است: هر وضعیت مجوز چه چیزی را اجازه میدهد، چگونه قابلیتها اعطا میشوند و چگونه میتوان همهٔ اینها را از کد بررسی کرد. (برای بارگذاری یک مجوز، به شروع کار → تنظیم مجوز مراجعه کنید.)
وضعیتهای مجوز و عملکرد آنها
| وضعیت | اسناد را باز میکند؟ | واترمارک | قابلیتها |
|---|---|---|---|
| مجوز کامل (پرداختی) (درون بازهٔ اشتراک/بهروزرسانی آن) | بله | هیچکدام | آنهایی که خریداری شدهاند (Has* پرچمها) |
| مجوز موقت (توسعهدهنده/NFR — مجوز ارزیابی، قبل از تاریخ انقضا) | بله | هیچکدام | همه — اعطای کلی (قنات ارزیابی) |
| منقضیشده (یک مجوز موقت پس از تاریخ انقضای آن، یا یک اشتراک پرداختی پس از تاریخ تمدید) | بله | واترمارک ارزیابی | هیچکدام اعطا نشده |
| بدون هیچ فایل مجوزی | بله | واترمارک ارزیابی | هیچکدام اعطا نشده |
| یافت شد اما رد شد (امضای نامعتبر، دستکاری شده، فهرستسیاه، یا ساختی جدیدتر از بازهٔ نسخهٔ مجوز) | خیر — LicenseException در هر باز کردن | — | — |
دو پیامد که ارزش درک دارند:
- یک مجوز گمشده، مجوز موقت نیست. بدون فایل مجوز، صفحات با واترمارک نمایش داده میشوند و هیچ قابلیتی (جستجو، حاشیهنویسی، افزونهها) فعال نیست. تجربهٔ کامل بدون واترمارک نیاز به یک مجوز موقت واقعی دارد (دریافت یک مجوز).
- فقط یک مجوز رد شده باز کردن را مسدود میکند. انقضای تقویم/اشتراک به نمایش واترمارک منجر میشود؛ اما استقرار یک ساخت جدیدتر از بازهٔ نسخهٔ مجوز رد میشود و بهسرعت شکست میخورد با یک
LicenseException، بنابراین شما آن را در زمان استقرار میگیرید — نه با ارسال بیصدا خروجی واترمارکدار. این استثناء (ازOpenDocumentAsync) دلیل را ازLicense.RejectionMessageحمل میکند.
قابلیتها
Doconut عملکردهای اختیاری را با قابلیت محدود میکند. امروز اینها افزونههای Converter و DICOM بهصورت انتخابی بهعلاوه ویژگیهای داخلی Search و Annotation هستند که هر یک توسط مجوز شما اعطا میشوند. نمایشگر پایه یک قابلیت نیست — بلکه پیشنیاز است که بهصورت IsViewerLicensed نمایان میشود:
bool viewerLicensed = lic.IsViewerLicensed; // non-TRIAL license present AND covering this build's versionدروازهٔ تکتکهای که کل خط لوله از آن استفاده میکند IsCapabilityGranted است:
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.
// 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 گزارش میدهد:
app.MapHealthChecks("/health");آن را به سیستم مانیتورینگ خود متصل کنید و یک اشتراک در حال انقضا بهجای یک تیکت پشتیبانی تبدیل به هشدار میشود.
ارتقاء نسخه
یک مجوز یک پنجرهٔ نسخه را پوشش میدهد. بهروزرسانی بسته NuGet به ساختی جدیدتر از آن پنجره باعث میشود مجوز برای این ساخت نامعتبر شود: IsVersionValid به false تبدیل میشود و باز کردن مسدود میشود با یک LicenseException (دلیل در License.RejectionMessage است) — بهصورت عمدی برای شکست سریع، تا یک ساخت قدیمی یا بدون مجوز در زمان استقرار کشف شود نه بهصورت بیصدا واترمارکگذاری خروجی تولید. اشتراک را تمدید کنید، فایل .lic را جایگزین کنید و برنامه را مجدداً راهاندازی کنید تا AddDoconut() مجوز جدید را بارگذاری کند.
آیا این صفحه مفید بود؟