軟件測試中Oracle Form二次開發實戰總結 第十二章 Function&Form Security
oracle是殷墟(Yin Xu)出土的甲骨文(oracle bone inscriptions)的英文翻譯的第一個單詞,在英語里是“神諭”的意思。Oracle是世界領先的信息管理軟件開發商,因其復雜的關系數據庫產品而聞名。Oracle數據庫產品為財富排行榜上的前1000家公司所采用,許多大型網站也選用了Oracle系統。
關于Form的安全機制,我覺得可以從以下幾個方面去分析:
1是否有權限打開這個Form;
2打開Form后,在操作層面上權限有限制(如有的用戶僅能查詢,有些用戶可以更新等);
3對于Form中不同的部件,用戶的權限不一(如用戶A可以點擊審批的按鈕,用戶B不行)。
對于情況1,EBS采用我們非常熟悉的Basic Function Security,這是一種基于responsibility、menu和function(功能)的管理機制,不再贅述。
情況2時,實現的方法有多種:
(1) 定義FUNCTION時,設置QUERY_ONLY參數;
(2) 用變量記錄登錄用戶的信息,并依此動態的設置Block和Item的屬性,需要注意的是:Item的inset_allowed,update_allowed屬性只能從界面上控制不能添加或修改,并不能控制代碼進行的添加或修改;而Block的inset_allowed,update_allowed屬性從真正意義上對代碼行為進行限制,用代碼操作上述屬性為否的Block,系統會提示出錯;
(3) 使用Form.個性化設置;
(4) 使用User Profile。
針對情況3,實現的方法有就更多:
(1) 類似情況2中,可根據Form. Parameter的不同值開啟或禁用Form的某些功能;
(2) 使用Form.個性化設置;
(3) 使用User Profile;
(4) 集成工作流控制;
(5) Advanced Function Security將考慮更加詳細的安全機制,用戶是否有權使用某個form中的某個subfunction,是否有權看見form的某個部件,是否有權打開新的窗體等等。對于這種安全控制策略,我的理解是這樣的:首先在系統里定義一個subfunction,然后把它掛到某個responsibility的menu下,然后在form里判斷登錄的用戶具有subfunction的訪問權限,激活或禁用該Form的功能。
下面是關于Advanced Function Security的示例代碼:
在form的pre-form. trigger中調用FND_FUNCTION.TEST函數驗證登錄用戶的權限:
IF (FND_FUNCTION.TEST('DEMVC_DEMVCEOR_PRINT_ORDER')) THEN
app_special.instantiate('SPECIAL1','產品組合查詢');
app_special.enable('SPECIAL1',PROPERTY_ON);
SET_ITEM_PROPERTY('CONTROL.LINE_SEARCH',ENABLED,PROPERTY_TRUE);
END IF;
系統會檢測登錄用戶是否具有對subfunction- DEMVC_DEMVCEOR_PRINT_ORDER的訪問權限,驗證通過的話則激活一個SPECIAL菜單項和一個按鈕項。
文章來源于領測軟件測試網 http://www.kjueaiud.com/