Power Apps 的兩個預設 Solution 有何不同?釐清 App 歸屬、移除與安全性
Copyright Notice: This article is an original work licensed under the CC 4.0 BY-NC-ND license.
If you wish to repost this article, please include the original source link and this copyright notice.
Source link: https://v2know.com/article/1416
本文是〈Power Platform Solution 環境變數完整解析:Definition、Current Value、Default Solution 與匯出機制〉的 Canvas App 延伸篇。前篇以 Environment Variable 的 Definition、Current Value 與匯出機制為主軸,並介紹兩個預設 Solution 的基本概念。
本篇將這些概念套用到 Canvas App,著重說明建立時的歸屬、從自訂 Solution 移除後的保留關係,以及對權限安全與跨環境交付的影響。想先釐清環境變數與 Solution 的關係,可以先讀前篇;若疑問是 App 為什麼出現在某個 Solution,或移出後是否有安全風險,可以直接閱讀本篇。文中案例均使用通用名稱。
在 Power Apps 的 Solutions 清單裡,可能同時看到 Common Data Services Default Solution 和 Default Solution。使用日文介面時,後者通常顯示為「既定のソリューション」。兩個名稱都有 Default,很容易讓人以為它們用途相同,或是 App 只能存放在其中一個。
例如,一個「使用者資訊測試 App」出現在 Common Data Services Default Solution;另一個 App 從「業務管理 Solution」移除後,卻只能在「既定のソリューション」找到。這是否代表移除不完整?會不會缺少安全保護?要回答這些問題,先要分清楚 Solution 的用途與元件的實際存在位置。
兩個預設 Solution 的用途
本文討論的是具有 Dataverse 資料庫的環境,以及已納入 Dataverse Solution 管理的 Canvas App。未納入 Solution 的舊式獨立 Canvas App,不宜直接套用下面的歸屬表。
| Solution | 主要用途 | 如何理解 App 出現在其中 |
|---|---|---|
| Common Data Services Default Solution | 供製作者進行預設自訂工作;未指定其他適用 Solution 時,通常由它承接新增的元件。 | 這個 App 已被納入該 Solution 的元件集合。 |
| Default Solution/既定のソリューション | 提供環境全部 Solution 元件與設定的總覽。 | 這個 App 是環境中的 Solution 元件,因此可從這個總覽查找。 |
Common Data Services Default Solution 並不等於所有自訂元件的完整集合;其他自訂 Solution 中的 App,也可能沒有加入它。相對地,Default Solution 的用途就是協助查看環境的全部元件。微軟在使用 Solution 管理自訂內容的文件中,明確區分了這兩種用途。
同一個 App 可以出現在多個 Solution
在同一環境的未受管理 Solution 中,可以把 Solution 理解為「包含哪些元件的清單與部署包」。同一個既有 App 加入另一個未受管理 Solution,通常是在增加元件關聯,並沒有另外複製一個 App。
因此,App 同時出現在「業務管理 Solution」與「既定のソリューション」,是正常情況。若它也被加入 Common Data Services Default Solution,就可能在三個入口都看到同一個 App。判斷是否為同一個 App,應核對 App ID,不能只依顯示名稱。
這也表示,未受管理 Solution 並不提供彼此獨立的編輯隔離:它們共用同一個未受管理層。在某個 Solution 中修改既有 App,仍是在修改環境裡的那個 App。相關原理可參考Solution 層的官方說明。
建立時沒有指定 Solution,App 會加入哪裡?
對支援預設納入 Solution 的 Canvas App 建立方式而言,若環境已啟用「新 Canvas App 預設加入 Dataverse Solution」,建立時沒有在指定的未受管理 Solution 中操作,就會受到製作者首選 Solution(Preferred solution)的影響。
若已設定自訂的首選 Solution,例如「業務管理 Solution」,新增元件通常會加入該 Solution。若沒有另設首選,平台預設使用 Common Data Services Default Solution;該 Solution 不可用時,才以 Default Solution 作為後備。因此,「沒有手動指定 Solution」並不必然等於「一定加入 CDS 預設 Solution」,還要查看首選設定。
這些規則也有建立入口與功能支援範圍的限制,可對照首選 Solution 設定與Canvas App 預設加入 Solution的官方文件。
從自訂 Solution 移除後,為什麼仍在「既定のソリューション」?
以下各列代表不同情況;假設 App 已納入 Solution 管理、自訂 Solution 為未受管理,且沒有另外加入表中未列出的 Solution。
| 情況 | Common Data Services Default Solution | 業務管理 Solution | Default Solution |
|---|---|---|---|
| 建立時未指定 Solution,也未另設首選,依預設規則加入 CDS。 | 有 | 無 | 有 |
| 直接在業務管理 Solution 中建立,沒有加入 CDS。 | 無 | 有 | 有 |
| 上一列的 App 後來從業務管理 Solution 移除。 | 無 | 無 | 仍然有 |
| App 原本同時加入 CDS 與業務管理 Solution,後來僅從業務管理 Solution 移除。 | 仍然有 | 無 | 仍然有 |
從未受管理 Solution 移除 App,只會取消它與該 Solution 的關聯,App 本身仍保留在環境中。它不會因為移出自訂 Solution,就自動補進 Common Data Services Default Solution;也不會因此回復為舊式的非 Solution App。
操作時要分清楚 Remove from this solution 與 Delete from this environment。前者保留環境中的元件,後者則是刪除元件本體。本文的「移出」只指前者,不能套用到卸載受管理 Solution(Managed solution)的情況。微軟的移除 Solution 元件說明提供了這項區別。
另外,現在看到的關聯不能完整還原建立歷史。App 可能後來被加入其他 Solution,也可能移除過關聯;目前的首選 Solution,同樣不能證明建立當時使用了哪個 Solution。
只在 Default Solution,會有安全隱患嗎?
單就不在 Common Data Services Default Solution 這件事而言,不會額外造成安全漏洞,也不會因此讓 App 自動公開。僅取消未受管理 Solution 的元件關聯,本身不會停用 App 或自動放寬使用者權限。把 App 加入 CDS 預設 Solution,也不會額外替它加上一道存取保護。
實際權限要看 App 分享給哪些使用者或群組、誰具有共同擁有者等編輯權限,以及資料來源允許他們存取哪些內容。使用 Dataverse 時,需要檢查安全性角色與資料範圍;使用 SharePoint、Excel 或其他服務時,也要分別確認該服務的權限。微軟的Canvas App 分享文件也強調,App 分享與資料來源權限都需要管理。
連線與 Flow 的執行身分同樣重要。有些連線由使用者各自登入,有些連線可以隨 App 共用;Flow 使用呼叫者連線或擁有者提供的連線,也可能影響能執行的操作。這些應依實際連接器與設定判斷,不能從 Solution 名稱推斷。可參考Canvas App 相依資源與連線的分享規則。
所以,「這種 Solution 歸屬本身沒有額外風險」不等於「這個 App 已通過完整安全檢查」。兩者需要分別確認。
真正需要留意的是交付與後續維護
若 App 已從業務管理 Solution 移除,之後匯出該 Solution 時,就不應期待它仍包含這個 App。App 可能在原環境照常使用,卻沒有被帶入下一個環境,造成交付遺漏。Default Solution 本身也不能作為可匯出的完整部署包。
對短期驗證或個人測試 App,可以依實際用途決定管理方式。對需要持續維護或跨環境交付的 App,則適合加入專用的未受管理 Solution,確認必要的資料表、Flow、連線參照與環境變數是否一併管理,並驗證目標環境的相依項與連線設定。微軟也建議以自訂 Solution 管理可交付的自訂內容。
如果只是因為清單裡看不到 App 而懷疑歸屬,先核對環境、搜尋條件、物件類型篩選與 App ID,再查明它實際加入哪些 Solution。確認這些資訊,比單憑名稱或列表外觀推測建立歷史更可靠。
This article was last edited at