Device License SDKPlatform 13.3.7 · SDK 3.1.0

功能授權

Entitlement 功能開關

在真正執行受保護功能之前,同時驗證 License 與功能代碼。

這個範例解決什麼問題

當同一套程式需要 Basic、Professional 或選購模組時,Entitlement 用來描述『這張 License 可以使用哪些功能』。它不是單純的 UI 顯示條件,而是每個高價值功能入口都必須重新確認的授權邊界。

適合使用的場景

  • 同一個 EXE 需要依 License 等級開放不同匯出、分析或產檔能力。
  • 客戶可以另外購買選購功能,而不需要更換整套應用程式。
  • 你希望後端撤銷某項功能後,Client 下一次驗證就停止執行該功能。

為什麼採用這種設計

  • 只隱藏按鈕很容易被繞過;真正的函式入口仍需呼叫 require_valid() 與 require(feature_code)。
  • 功能代碼由 Server 管理,Client 只根據已簽章的驗證結果做決策。
  • 把 License 有效性與功能權限分開,可避免『License 有效就代表所有功能都能用』的錯誤假設。

程式實際怎麼執行

同步檢查。has() 只讀目前快照;require() 是核心功能入口的授權邊界,但它也不會自行重新上網。

SDK 自動完成

  • 驗證結果把 Entitlement 放入 LicenseState。
  • require() 同時檢查 License valid 與功能代碼。

你的程式必須負責

  • 先取得足夠新的 state。
  • 在核心函式內 require,不只隱藏按鈕。

呼叫時機/頻率

  • UI 可在啟動後用 has() 預覽。
  • 每次高價值操作前重新驗證再 require。

成功時應看到

  • 有功能才執行;缺少時拋 FeatureNotLicensedError。

失敗處理

  • 拒絕時停止功能,不退回舊 UI 狀態。

建議整合步驟

  1. 步驟 1

    與管理員確認正式 Entitlement Code,並建立一致的常數名稱。

  2. 步驟 2

    在按鈕事件之外的核心操作函式再次驗證 License 與 Entitlement。

  3. 步驟 3

    對拒絕結果提供清楚的使用者訊息,但不要在 Log 中輸出敏感憑證。

  4. 步驟 4

    針對有權限、無權限、License 過期與離線狀態建立測試案例。

完整程式碼

公開範例使用 Placeholder,重點是理解資料流與 API 行為。正式 Gateway URL、Product UUID、Namespace 與 Public Key 請向授權管理員取得;可直接運行的完整範例由管理員在 Admin SDK 整合中心下載。

python
"""Protect a real feature boundary, not only a visible UI button."""

from keygen_device_sdk import FeatureNotLicensedError, LicenseSDKError





def export_hdl(client) -> None:

    try:

        state = client.validate_or_raise()

        state.require("YOUR_FEATURE_CODE")

        print("Exporting HDL...")

    except FeatureNotLicensedError:

        print("This License does not include HDL export")

    except LicenseSDKError as exc:

        print(f"Export blocked: {exc}")

上線前至少測試

  • 有/無權限。
  • 直接呼叫核心函式。
  • 運行中撤銷。

常見錯誤

  • 不要只在程式啟動時檢查一次。
  • 不要只用前端 UI disabled 狀態保護功能。
  • 不要讓使用者輸入任意 Entitlement Code 再交給核心功能。