רישוי
יכולות, רמות רישיון ושירות הרישיון
דף זה הוא ההתייחסות בזמן ריצה לאופן שבו רישיון מעצב את ההתנהגות של Doconut: מה כל מצב רישיון מאפשר, איך ניתנות היכולות, ואיך לבדוק את כל זה מהקוד. (לטעינת רישיון, ראו "התחלה → הגדרת רישיון".)
מצבי רישיון ומה הם עושים
| מצב | פותח מסמכים? | סימן מים | יכולות |
|---|---|---|---|
| רישיון מלא (בתשלום) (בתוך חלון המנוי/עדכון שלו) | כן | אין | אלו שנרכשו (Has* flags) |
| רישיון זמני (מפתח/NFR — רישיון ההערכה, לפני תאריך התפוגה שלו) | כן | אין | הכל — מתן כולל (משפך ההערכה) |
| פג תוקף (רישיון זמני שעבר את תאריך התפוגה שלו, או מנוי בתשלום שעבר את תאריך החידוש) | כן | סימן מים של הערכה | לא ניתנה |
| אין קובץ רישיון כלל | כן | סימן מים של הערכה | לא ניתנה |
| נמצא אך נדחה (חתימה לא תקפה, שונה, ברשימה שחורה, או בנייה חדשה יותר מחלון הגרסה של הרישיון) | לא — LicenseException בכל פתיחה | — | — |
שתי תוצאות שכדאי להטמיע:
- חוסר רישיון אינו רישיון זמני. ללא קובץ רישיון, הדפים מוצגים עם סימן מים ואין שום יכולת (חיפוש, הערה, תוספים) פעילה. החוויה המלאה ללא סימן מים דורשת רישיון זמני (קבל אחד).
- רק רישיון שנדחה חוסם פתיחה. תפוגת לוח שנה/מנוי מתחלפת להצגת סימן מים; אך פריסת בנייה חדשה יותר מחלון הגרסה של הרישיון נדחית ונכשלת במהירות עם
LicenseException, כך שאתה תופס זאת בפריסה — ולא על ידי שליחת פלט עם סימן מים בשקט. החריגה (מ‑OpenDocumentAsync) נושאת את הסיבה מ‑License.RejectionMessage.
יכולות
Doconut מגביל פונקציונליות אופציונלית באמצעות יכולת. היום אלה הם תוספי ממיר ו‑DICOM שניתן לבחור, בנוסף לתכונות המובנות חיפוש ו‑הערה, שכל אחת ניתנת לפי הרישיון שלך. הצופה הבסיסי אינו יכולת — הוא דרישה מוקדמת, מוצג כ‑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() תטען את הרישיון החדש.
האם דף זה היה מועיל?