1. 程式人生 > >如何在SAP Cloud for Customer自定義BO中創建訪問控制

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

global ssp 我會 TP BE lis 訪問權限 author ext

文章作者: 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中的控制的運行原理.

語法

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中創建訪問控制