如何在SAP Cloud for Customer自定義BO中創建訪問控制
已獲得Yi的轉載許可。
訪問控制方式和使用註意事項
1. C4C中的訪問控制有兩種方式
- RelevantForAccessControl
- AccessControlContext
2. 要使用訪問控制,必須滿足下面條件
- 每一個業務對象(BO),只能存在唯一一個訪問控制.
- 與之關聯的源節點必需是業務對象(BO)的根(Root)節點
- 對於RelevantForAccessControl,它所關聯的節點也必須是根節點(Root).
- 對於RelevantForAccessControl,它所關聯的節點,必須存在訪問控制.查看方法可以進studio中的Repository Explorer,點擊對象查看.在業務對象(BO)文檔中的Supported Access Contexts中查看.
- 對於AccessControlContext.,它是通過UUID做訪問控制的,所以定義的元素必定要與UUID相關.
如何創建BO我們這裏不再論述, 這編文章重點講解的是C4C中的控制的運行原理.
語法
1. RelevantForAccessControl
這個關鍵詞的語法是
[RelevantForAccessControl] association toBusinessPartner to BusinessPartner;
2. AccessControlContext
這個關鍵詞的語法是
[AccessControlContext (Employee)] element UID : UUID; [AccessControlContext (Employee)] association ToEmployee to AP.FO.BusinessPartner.Global:Employee using UUID ;
創建訪問控制
下面我們以AccessControlContext為例,看看C4C的訪問控制是如何動作的.
第一步,在我們創建的BO中添加訪問控制字段
[AccessControlContext(SalesOrganization)] association toOrganisationalUnit to OrganisationalUnit using UUID;
在BeforeSave中把上面訪問控制字段的值添加上.
激活並生成屏幕
第二步..打開WCView屏幕文件,打開屬性面板
更改AccessContextCode屬性為9001-PDI:SalesOrganisation
這步非常重要,而且必須是訪問控制字段相對應的訪問控制代碼
如果這一步設置錯誤,訪問控制不會生效,詳細我會在後面說.
第三步.更改WCView下面包括的子屏幕的訪問權限,例如(QC,OWL,TI)
打開其中的Access Controlled Business Object
把Unrestricted Access設置為False
這一步也是非常重要,如果不把Unrestricted Access設置為False的話,屏幕中的字段是不會繼承WCView中設置的訪問控制屬性的.
第四步.更改OWL頁面中的Query,讓他綁定帶有SAP_AccessControlList的Query
QueryByElements或者自定義的Query都可以.
做完以上部署後,系統就能使訪問控制生效了,之後要做的事情就是把WCView分配給角色,然後設置訪問控制權限.
訪問控制的工作原理
當我們在Business Object中創建完訪問控制字段並激活後
系統會給該BO增加一個新的Dependent Node
AccessControlList中包含下面字段
上圖來自SAP社區博客Implementing Access Control on Custom Business Objects。
其中最重要的兩個字段是ACCESS_CONTEXT_CODE和OBJECT_UUID-CONTENT
- ACCESS_CONTEXT_CODE中儲存了該BO數據的訪問控制代碼
- OBJECT_UUID-CONTENT中儲存了該BO數據的訪問控制內容
當我們保存時, AccessControlContext中關聯的值被填充上,然後系統會把關聯中的UUID值保存到SAP_AccessControlList中的OBJECT_UUID-CONTENT, AccessControlContext括號內的對象會轉化為CODE,存放到SAP_AccessControlList中的ACCESS_CONTEXT_CODE.
轉化的CODE是根據上表中的值來轉化的.所以上在第二部的WCView中的AccessContextCode值不能亂選.不然對不上的話,訪問控制是不會生效的.
當我們在系統中為用戶分配訪問權限時,系統會為每個用戶訪問每個業務對象生成一個表
只有當用戶的訪問權限中的數據與BO中的SAP_AccessControlList中的OBJECT_UUID-CONTENT匹配,用戶才能看到該條數據.
Tips 1
如果我們在系統中創建了多個訪問控制字段,系統只會以最後一條訪問控制字段
例如這裏,有兩個訪問控制字段,一個是Employee(1010),另一個是SalesOrganisation(9001),當出現多個訪問控制字段時,系統只會以最後出現的訪問控制字段為主.
Tips 2
別忘了設置其它相關的屏幕(QC,TI,QAF,OWL),不然這些屏幕就不受訪問控制字段影響了,會看到系統中所有數據.
Tips 3
假設變更了訪問控制類型後,那麽之前設置的訪問控制字段是不受新的訪問控制類型影響的,解決方法是進去變更之前的數據中更改任何數據,然後保存.
Tips 4
PDI USER賬號是個神奇的賬號,他是不會受到ACL影響的唯一賬號,所以如果遇到ACL的一些問題,不防試試使用PDI USER去測試一下.
參考文章
- Access Control Management: How to analyze access control issues – Check User’s Authorization
- Implementing Access Control on Custom Business Objects
- Instance Based Access Control
要獲取更多Jerry的原創技術文章,請關註公眾號"汪子熙"或者掃描下面二維碼:
如何在SAP Cloud for Customer自定義BO中創建訪問控制