如何在SAP Cloud for Customer自定義BO中建立訪問控制

文章做者: Yi

已得到Yi的轉載許可。

訪問控制方式和使用注意事項

1. C4C中的訪問控制有兩種方式

  • RelevantForAccessControl
  • AccessControlContext

2. 要使用訪問控制,必須知足下面條件

  • 每個業務對象(BO),只能存在惟一一個訪問控制.
  • 與之關聯的源節點必需是業務對象(BO)的根(Root)節點
  • 對於RelevantForAccessControl,它所關聯的節點也必須是根節點(Root).
  • 對於RelevantForAccessControl,它所關聯的節點,必須存在訪問控制.查看方法能夠進studio中的Repository Explorer,點擊對象查看.在業務對象(BO)文檔中的Supported Access Contexts中查看.
  • 對於AccessControlContext.,它是經過UUID作訪問控制的,因此定義的元素一定要與UUID相關.

如何建立BO咱們這裏再也不論述, 這編文章重點講解的是C4C中的控制的運行原理.java

語法

1. RelevantForAccessControl

這個關鍵詞的語法是測試

[RelevantForAccessControl] association toBusinessPartner to BusinessPartner;

2. AccessControlContext

這個關鍵詞的語法是spa

[AccessControlContext (Employee)] element UID : UUID;
[AccessControlContext (Employee)] association ToEmployee to AP.FO.BusinessPartner.Global:Employee using UUID ;

建立訪問控制

下面咱們以AccessControlContext爲例,看看C4C的訪問控制是如何動做的.rest

第一步,在咱們建立的BO中添加訪問控制字段code

[AccessControlContext(SalesOrganization)] association toOrganisationalUnit to OrganisationalUnit using UUID;

在BeforeSave中把上面訪問控制字段的值添加上.
激活並生成屏幕對象

第二步..打開WCView屏幕文件,打開屬性面板blog

更改AccessContextCode屬性爲9001-PDI:SalesOrganisation
這步很是重要,並且必須是訪問控制字段相對應的訪問控制代碼
下面是我的收集的訪問控制字段與訪問控制代碼表

若是這一步設置錯誤,訪問控制不會生效,詳細我會在後面說.繼承

第三步.更改WCView下面包括的子屏幕的訪問權限,例如(QC,OWL,TI)

打開其中的Access Controlled Business Object

把Unrestricted Access設置爲False
這一步也是很是重要,若是不把Unrestricted Access設置爲False的話,屏幕中的字段是不會繼承WCView中設置的訪問控制屬性的.ip

第四步.更改OWL頁面中的Query,讓他綁定帶有SAP_AccessControlList的Query

QueryByElements或者自定義的Query均可以.ci

作完以上部署後,系統就能使訪問控制生效了,以後要作的事情就是把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去測試一下.

參考文章

要獲取更多Jerry的原創技術文章,請關注公衆號"汪子熙"或者掃描下面二維碼:

相關文章
相關標籤/搜索