软件测试中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菜单项和一个按钮项。