系統使用者
系統使用者是 ThingWorx 中的系統物件,其設計目的是讓內部服務權限的管理更加輕鬆,同時仍允許根據不同使用者的情況許可外部 API 層。系統使用者是選用的。如果未將系統使用者指派給服務,ThingWorx 會針對所有後續經過包裝的服務檢查發出原始請求之使用者的權限。
正常來說,當使用者呼叫服務時,該使用者對於所呼叫的服務以及從最初呼叫的服務內呼叫的任何其他服務都必須具備權限。例如,使用者針對於內部呼叫 QueryStreamEntriesWithDataGetDataTableEntryByKey 的物件執行一項名為 GetMachineRunTimeHistory 的服務。在不使用系統使用者的情況下,呼叫 GetMachineRunTimeHistory 的使用者還需要明確的權限來執行 QueryStreamEntriesWithDataGetDataTableEntryByKey
在使用系統使用者的情況下,如果從服務或訂閱內呼叫某項自訂服務 (經過包裝的服務呼叫),並允許系統使用者執行該服務,則不論最初觸發事件、指令集或服務之序列的使用者為何,系統都將允許使用者執行該服務。不過,該使用者將無法直接呼叫經過包裝的服務本身 (以上述範例來說是 QueryStreamEntriesWithDataGetDataTableEntryByKey,除非已明確允許使用者)。
此作法讓管理員可使用具備明確存取啟用的使用者和群組來鎖定可供外部存取的 Surface API。雖然始終建議根據使用者傳播來包裝服務呼叫,但從權限管理角度來看,系統使用者可讓內部服務呼叫的管理更加輕鬆。
系統使用者可新增至管理員群組。這麼做將授與所有使用者對於嵌套在服務呼叫內之所有內容的完整權限 - 無論發出呼叫之使用者的權限為何,在自訂服務內呼叫的所有服務都將成功。
當查詢物件時,系統使用者不會展開使用者的可見度。系統使用者無法用來擷取使用者沒有可見度權限而無法查看的物件。請考慮下列說明此情況的範例:
1. 有五個物件分別為 T1T2T3T4T5,它們繼承了物範本 Template1,而且有兩位使用者:User1User2
2. User1T1T2 擁有可見度權限,User2T4T5 擁有可見度權限。
3. 為系統使用者授與了針對 Template1QueryImplementingThings 的服務執行權限,並建立了一個名為 CallQueryImplementingThings 的自訂服務,其會再內部呼叫 QueryImplementingThings 並為 User1User2 提供對於 CallQueryImplementingThings 服務的服務執行權限。
4. User1 執行 CallQueryImplementingThings 服務時,他們會在結果中看到 T1T2
5. User2 執行 CallQueryImplementingThings 服務時,他們會在結果中看到 T4T5
* 
不建議使用系統使用者來略過安全性,或是降低謹慎設計與實行安全應用程式的需求。最佳作法建議您應該將對於系統使用者的依賴限制在特定的使用案例,而非作為針對使用者傳播作法的一般因應措施。
系統使用者範例
授與系統使用者執行服務的權限意味著,每位使用者都會被授與從自訂服務內執行服務的權限,但並非必須授與權限才能直接呼叫該服務。若要正確使用:
1. 授與系統使用者執行服務的權限,但要限制該服務的權限,使其他使用者沒有執行該服務的權限。
2. 編寫會呼叫該受限制服務的自訂服務,然後為使用者提供執行自訂服務的權限,但不是受限制服務的權限。
3. 使用者將能夠執行該自訂服務,即使他們並沒有執行受限制服務的權限也可以。
為了進一步使用範例說明這一概念,請考慮下列使用案例:
您要編寫一個自訂服務,該服務會向使用者顯示特定已連線裝置的狀況,名為 CustomService1。為了執行此操作,CustomService1 會對 DeviceFunctions 資源使用 SearchDevices 服務,來查看平台中的所有裝置,然後篩選結果,以僅傳回特定裝置的結果。
不過,不僅會針對 CustomService1 檢查權限,也會對在 CustomService1 中執行的每個服務呼叫檢查權限。使用者將需要執行 SearchDevices 服務的權限,才能成功呼叫 CustomService1;否則呼叫 CustomService1 將會失敗。提供呼叫 SearchDevices 的使用者權限並不是理想方式,因為您可能不想讓使用者存取每個裝置的狀況,而只是想讓他們存取特定裝置的狀況。
系統使用者就可以解決這個問題。當直接執行服務時,會檢查該使用者的權限以確定其是否擁有權限。對於包括所有自訂服務在內的任何服務都是如此。但是,當從自訂服務中執行服務時,實際上會檢查兩個權限:使用者的權限以及系統使用者的權限。如果使用者或系統使用者擁有在自訂服務內執行服務的權限,則會像使用者擁有執行該服務的權限一樣執行服務內權限。由於只會在 CustomService1 內呼叫 SearchDevices,而且不會直接呼叫,因此您可授與系統使用者執行 SearchDevices 的權限。當使用者呼叫 CustomService1 時,會進行權限檢查,要確認 User1 沒有權限,也要確認系統使用者有權限。因此,會像使用者擁有權限一樣執行 SearchDevices。如果使用者曾嘗試直接呼叫 SearchDevices,而未從 CustomService1 中呼叫,則系統使用者的權限不適用,且使用者的權限會遭到拒絕。
這是否有幫助?