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

i042416發表於2019-08-19

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螢幕檔案,開啟屬性皮膚

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

更改AccessContextCode屬性為9001-PDI:SalesOrganisation
這步非常重要,而且必須是訪問控制欄位相對應的訪問控制程式碼
下面是個人收集的訪問控制欄位與訪問控制程式碼表


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


如果這一步設定錯誤,訪問控制不會生效,詳細我會在後面說.

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


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


開啟其中的Access Controlled Business Object


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


把Unrestricted Access設定為False
這一步也是非常重要,如果不把Unrestricted Access設定為False的話,螢幕中的欄位是不會繼承WCView中設定的訪問控制屬性的.

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


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


QueryByElements或者自定義的Query都可以.

做完以上部署後,系統就能使訪問控制生效了,之後要做的事情就是把WCView分配給角色,然後設定訪問控制許可權.


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

訪問控制的工作原理

當我們在Business Object中建立完訪問控制欄位並啟用後


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

系統會給該BO增加一個新的Dependent Node


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

AccessControlList中包含下面欄位

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


上圖來自SAP社群部落格 Implementing Access Control on Custom Business Objects

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

其中最重要的兩個欄位是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.

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

轉化的CODE是根據上表中的值來轉化的.所以上在第二部的WCView中的AccessContextCode值不能亂選.不然對不上的話,訪問控制是不會生效的.

當我們在系統中為使用者分配訪問許可權時,系統會為每個使用者訪問每個業務物件生成一個表


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


只有當使用者的訪問許可權中的資料與BO中的SAP_AccessControlList中的OBJECT_UUID-CONTENT匹配,使用者才能看到該條資料.

Tips 1

如果我們在系統中建立了多個訪問控制欄位,系統只會以最後一條訪問控制欄位


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


例如這裡,有兩個訪問控制欄位,一個是Employee(1010),另一個是SalesOrganisation(9001),當出現多個訪問控制欄位時,系統只會以最後出現的訪問控制欄位為主.

Tips 2

別忘了設定其它相關的螢幕(QC,TI,QAF,OWL),不然這些螢幕就不受訪問控制欄位影響了,會看到系統中所有資料.

Tips 3

假設變更了訪問控制型別後,那麼之前設定的訪問控制欄位是不受新的訪問控制型別影響的,解決方法是進去變更之前的資料中更改任何資料,然後儲存.

Tips 4

PDI USER賬號是個神奇的賬號,他是不會受到ACL影響的唯一賬號,所以如果遇到ACL的一些問題,不防試試使用PDI USER去測試一下.

參考文章

要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2654202/,如需轉載,請註明出處,否則將追究法律責任。

相關文章