能力
能力(capability)讓你的套件在 NAS 上多一項功能。沒有任何能力時,你的處理常式以套件帳號執行,並保存私有資料。你可以在建立專案時(init --with)或之後(add)加入能力。每項能力對應 dsm-package.yaml 中 capabilities: 底下的一個欄位。
| 能力 | --with/add 名稱 | Manifest 欄位 |
|---|---|---|
| 檔案 | files | files: session |
| 登入 | login | identity: standalone |
| 背景工作 | jobs | jobs: true |
| Delegate(委派) | delegate | delegate: {…}(同時啟用 jobs) |
| Root 操作 | root-ops | rootOps: true |
synopkgland add files jobsadd 會更新 manifest 與 CLI 擁有的檔案,並保留你的處理常式與頁面。若你修改過的檔案會被 add 取代,它會以 ADD_FILE_CONFLICT 停止。不使用這些模板的套件,請見既有原生產品。
兩種 App
Section titled “兩種 App”| 種類 | 能力 | Root | 核准 | 解除安裝 |
|---|---|---|---|---|
| 無升權 App | 無、files、login、jobs | 任何階段都不使用:安裝、執行與解除安裝時都不用。 | 不需要 | DSM 會保留控制台 > 應用程式權限中這個 App 的規則,由管理員移除。 |
| Executor App | delegate 或 root-ops | 只透過受保護的 executor,限於已核准的策略。 | DSM 管理員核准一次。 | executor 會移除控制台 > 應用程式權限中這個 App 的規則,並停止它的登入入口網站網址。 |
只有 executor App 能宣告 portal。請見入口網站與資料與移除。
你的程式碼以誰的身分執行
Section titled “你的程式碼以誰的身分執行”| 能力 | 你的程式碼以誰的身分執行 | 用途 | 指南 |
|---|---|---|---|
| 無(基礎) | 套件帳號 | 處理常式、設定與私有資料。 | 原生 App |
files | 已登入的使用者,透過他自己的 DSM 工作階段 | 使用者登入 DSM 期間,瀏覽、上傳與下載他的 NAS 檔案。File Station 套用該使用者的權限。 | 檔案 |
login | 套件帳號,並以 App 工作階段辨識使用者 | 在 DSM 桌面之外,用 Synology 帳號登入。App 工作階段只辨識身分,不提供 File Station 存取。 | 登入 |
jobs | 套件帳號 | 在瀏覽器關閉後繼續執行,處理輸入的私有副本。 | 背景工作 |
delegate | 受保護的 executor,寫入使用者選定的資料夾 | 使用者離線後,把完成的檔案移入他的資料夾。 | Delegate |
root-ops | root,執行你隨套件附上的固定腳本 | 管理員執行具名操作,例如 root/whoami.sh。無法傳入引數。 | Root 操作 |
宣告能力並不決定誰能呼叫你的方法。每個方法都需要在 backend/internal/api/permissions.json 中有一條規則;沒有規則的方法只限管理員。dsm-package.yaml 的選用欄位 entry 可限制誰能開啟 App:admin-only 或 app-privilege。請見 Manifest。
哪些動作需要管理員核准
Section titled “哪些動作需要管理員核准”| 動作 | 誰 | 時機 |
|---|---|---|
files、jobs、login | 不需要 | 套件安裝後即可使用。 |
| 在安裝精靈中選取的共用資料夾 | DSM 管理員 | 安裝後,在控制台 > 共用資料夾 > 編輯 > 權限 > 系統內部使用者,授予套件帳號存取權。請見共用資料夾。 |
delegate 與 root-ops | DSM 管理員 | 安裝後,管理員在 App 視窗中確認一次 DSM 密碼。在此之前,status 會顯示 needs-admin-approval。 |
delegate 與 root-ops 共用同一次核准,涵蓋 executor 與其策略。當你變更 entry、delegate 的範圍、目的地、生命週期或操作,或任何 root/*.sh 檔案時,管理員需要重新核准。版本號變更、介面變更,或策略相同的新版 SDK 都不需要新的核准。解除安裝會移除核准與委派,因此重新安裝需要重新核准。請見資料與移除。
各模板支援的能力
Section titled “各模板支援的能力”| 模板 | files | login | jobs | delegate | root-ops |
|---|---|---|---|---|---|
native-go 搭配 Vue | 是 | 是,需 HTTPS | 是 | 是 | 是 |
native-go 搭配 plain 介面 | 僅後端。不產生介面。 | 否 | 僅後端。不產生介面。 | 僅後端。產生的管理員面板無法確認範圍。 | 是 |
binary | 否 | 否 | 否 | 否 | 不提供腳手架 |
compose | 否 | 否 | 否 | 否 | 否 |
| 既有原生產品 | 否 | 否 | 否 | 否 | 否 |
模板無法使用的組合會讓 check 以 CAPABILITY_UNSUPPORTED 或 CAPABILITY_COMBINATION_INVALID 失敗。容器 App 有自己的登入與存取模型,請見容器 App。
| 限制 | 值 |
|---|---|
login 搭配 plain 介面 | init 與 check 會拒絕。login 介面需要 Vue 介面。 |
jobs 搭配 daemon | 會被拒絕,除非 delegate 設為 lifetime: until-revoked。 |
jobs worker | 只有內建的 sha256-v1。worker: 不接受其他名稱。 |
root-ops 最低 DSM 版本 | os_min_ver 為 7.1-42661 或更新。 |
armv7 | native-go 與 binary 可使用所有能力。armv7 的 executor、jobs 與 daemon 已建置,但尚未在 NAS 上驗證。 |
| executor 支援的架構 | x86_64、aarch64 與 armv7。 |
root-ops 至少需要一個 root/<name>.sh;有 root/ 資料夾卻沒有 rootOps: true 時,會以 STANDALONE_ROOT_OPS_UNUSED 失敗。
| 症狀或錯誤碼 | 原因 | 解法 |
|---|---|---|
status 顯示 needs-admin-approval | 已宣告 delegate 或 root-ops 但尚未核准,或策略已變更。 | DSM 管理員在 App 視窗中核准。 |
CAPABILITY_UNSUPPORTED | 模板不支援該能力。 | 改用 native-go,或移除該能力。請見錯誤碼。 |
CAPABILITY_COMBINATION_INVALID | login 搭配 plain 介面,或 jobs 搭配 daemon。 | 改用 Vue 介面,或去掉其中一項。 |
ADD_FILE_CONFLICT | add 會取代你修改過的檔案。 | 閱讀列出的路徑,手動合併,再重新執行 add。 |