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