ACL 如何運作
某一存取控制規則中定義的參與者權限,可能與其他規則中所定義的其他權限相衝突。例如,您可以定義存取控制規則,只要偶發事件報告都處於「審核中」狀態,「小組 1」群組中的每位成員都具有刪除屬於 /Acme 網域所有偶發事件報告的權限。但是,在另一個存取控制規則中,您可以明確拒絕使用者 Audrey.Carmen 擁有該權限,而不管她在「小組 1」中的成員資格為何。在此類情況下,ACL 機制會計算參與者的淨權限。
下表提供不同權限之間如何搭配使用的快速參考。表下方為完整說明。
* 
計算 ACL 時,會略過拒絕虛擬角色 OWNER 之權限的存取控制規則。
參與者的淨權限根據下列規則進行計算:
每個參與者 (使用者、使用者定義群組、系統群組或組織) 最多只能有一個授與 ACL 項目、一個拒絕 ACL 項目以及一個絕對拒絕 ACL 項目;即不允許任何參與者擁有具有相同權限類型的多重 ACL 項目。每個項目都會指定要授與、拒絕或絕對拒絕之權限的集合。虛擬角色最多只能有一個授與 ACL 項目與一個拒絕 ACL 項目。不能為虛擬角色指定絕對拒絕權限。
* 
產生 ACL 之前,動態角色會解析至特定系統群組。請參閱在規則中解析動態角色的考量
會將除指定參與者以外所有參與者的授與、拒絕或絕對拒絕的權限視為針對某群組指定的權限,該群組成員包括除「管理員」使用者、所選使用者,或所選群組、動態角色或組織中的使用者以外的所有使用者。
如果某個特定使用者、群組、虛擬角色或組織沒有任何 ACL 項目,則該參與者的權限會設成空值。實際作用時,空值權限集會禁止參與者存取物件。
如果有一授與項目給予參與者權限,同時又有一拒絕或絕對拒絕項目拒絕了參與者的該項權限,結果是該權限遭到拒絕。
明確授與 (+) 虛擬角色 OWNER 的權限,會取代透過單獨使用者或使用者所屬之群組或組織的拒絕項目來拒絕 (-) 身為可擁有物件之擁有者的使用者的任何權限。
明確授與 (+) 虛擬角色 OWNER 的權限,不會取代透過單獨使用者或使用者所屬之群組或組織的絕對拒絕項目來絕對拒絕 (!) 身為可擁有物件之擁有者的使用者的任何權限。
明確授與 (+) 身為可擁有物件擁有者的使用者,或授與使用者所屬群組或組織的權限,不會被任何拒絕 (-) 虛擬角色 OWNER 的權限所覆蓋。拒絕虛擬角色 OWNER 擁有的權限會遭到略過。
明確授與 (+) 個別使用者的權限,會取代拒絕 (-) 該使用者的群組或組織擁有的權限,以及拒絕虛擬角色 ALL 擁有的權限。例如,使用者 ReneN 為「群組 1」的成員。根據 Acme 網域的存取控制規則,會拒絕「群組 1」的所有成員擁有對「審核中」生命週期狀態下所有偶發事件報告的修改權限。但是,如果另有一存取規則明確授與 ReneN 修改偶發報告的權限,即使他具有「群組 1」的成員資格,仍將被授與修改權限。
絕對拒絕 (!) 或拒絕 (-) 使用者擁有的權限會取代授與 (+) 該使用者群組或組織的權限。例如,根據 Acme 網域的存取控制規則,會授與「群組 1」的所有成員對「已審核」生命週期狀態下變更通知的「修改」權限。而另一個存取規則拒絕 ReneN 擁有對變更通知的「修改」權限。即使 ReneN 為「群組 1」的成員,仍會拒絕 ReneN 擁有「修改」權限。
絕對拒絕 (!) 授與群組或組織的權限不得由明確授與 (+) 作為群組或組織成員的個別使用者的權限所取代。例如,根據 Acme 網域的存取控制規則,會絕對拒絕「群組 1」的所有成員擁有對「已完成」生命週期狀態下變更請求的管理權限。即使另一個存取規則明確授與 ReneN 管理變更請求的權限,仍會拒絕 ReneN 擁有管理權限。
對於特定使用者而言,他的淨群組授與權限集是他所屬之每個群組與組織中所有授與權限的聯集。這包括授與虛擬角色 ALL 的權限。例如,使用者 ReneN 若是屬於「群組 1」、「群組 2」、和「群組 3」,ReneN 的授與群組權限集就會包含這三個群組被授與的所有權限。
對於特定使用者而言,他的淨群組拒絕權限集是他所屬之每個群組與組織中所有拒絕權限 (-) 的聯集。這包括拒絕虛擬角色 ALL 擁有的權限。例如,使用者 ReneN 若是屬於「群組 1」、「群組 2」、和「群組 3」,ReneN 的拒絕群組權限集就會包含這三個群組被拒絕的所有權限。
對於特定使用者而言,他的淨群組絕對拒絕權限集是他所屬之每個群組與組織中所有絕對拒絕權限 (!) 的聯集。例如,使用者 ReneN 若是屬於「群組 1」、「群組 2」、和「群組 3」,則 ReneN 的拒絕群組權限集就會包含這三個群組拒絕擁有的所有權限。無法絕對拒絕虛擬角色 ALL 的權限。
計算 ACL 的權限時,會合併使用者 ReneN 的授與、拒絕與絕對拒絕權限集,以確定存取權。例如,身為群組 1 的成員,ReneN 會被授與讀取 /Acme 網域中「審核中」生命週期狀態下所有偶發事件報告的權限。但是 ReneN 也是「群組 2」的成員,該群組卻不具有讀取該網域中偶發報告的權限。計算時,ReneN 讀取 /Acme 網域中偶發事件報告的權限設為空值,因此拒絕 ReneN 存取。
下表提供更多權限計算的範例。假設您是為好幾個網域建立存取控制原則的管理員。您指定的使用者之一 Ann 屬於 G1 群組,但不屬於 G2 群組。如果您指派的權限如下表,則 Ann 的權限結果將為表中最後一欄所示。
G1 權限
全部 (G2 除外) 權限
G1 與「全部 (G2 除外)」的聯集
個別權限
權限結果
+
-
!
修改 (M)
空集合
空集合
建立 (C)
空集合
空集合
(C) + (M)
空集合
空集合
刪除 (D) + 管理 (A)
空集合
空集合
(C) + (M) + (D) + (A)
+
-
!
(M)
(D)
(A)
(C)
(M)
空集合
(C) + (M)
(D) + (M)
(A)
(D)
空集合
空集合
(C) + (D)
+
-
!
(M) + (A)
(D)
空集合
(D)
(C)
空集合
(M) + (A) + (D)
(C) + (D)
空集合
(C)
(M)
(A)
(C)
+
-
!
(M)
空集合
空集合
(C)
空集合
(A)
(M) + (C)
空集合
(A)
(D) + (A)
(M)
空集合
(C) + (D)
您定義了網域的存取控制規則後,特定狀態下且屬於您建立規則的相同網域中的所有物件類型實例,都會共用同一份 ACL。這種 ACL 和物件類型、狀態和網域間的關聯,此後都會保留起來。當參與者想存取物件時 (例如檢視或修改),便會擷取關聯的 ACL,並強制執行原則。ACL 一旦計算出來,就會放入快取中,以供下次出現存取請求時能快速擷取。
例如,假設在 /Acme 網域中,使用者 Audrey.Carmen 成員所屬的群組可以讀取及刪除在「關閉」狀態下之 WTObject 類型的所有物件。她所屬的群組也可以修改 /Acme/Support 網域中所有「已關閉」狀態的偶發事件報告,其中 IncidentReport 是 WTObject 的子類型。但是,在 /Acme 網域中另有一條針對個別使用者 Audrey.Carmen 所建立的存取控制規則,明確拒絕她擁有對狀態為「已關閉」之偶發事件報告的「刪除」權限。
以下顯示 Audrey.Carmen 與 /Acme/Support 網域內狀態為「已關閉」之偶發事件報告關聯的 ACL 項目:
Audrey.Carmen +讀取、+修改、-刪除
當此 ACL 項目衍生自 /、/Acme 與 /Acme/Support 網域的存取控制原則時,會給予 Audrey.Carmen「讀取」與「修改」權限。由於 IncidentReport 是 WTObject 的子類型,所以 Audrey 讀取及刪除 WTObject 類型物件的權限也適用於偶發事件報告。但是,由於另有一存取控制規則明確拒絕她擁有對狀態為「已關閉」之偶發事件報告的「刪除」權限,因此她的權限結果為「讀取」與「修改」,她不能刪除屬於 /Acme/Support 網域下這種類型與狀態組合的物件。
這是否有幫助?