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