2012年5月16日星期三

ADF_125:为Entity Object增加安全性

开发环境:JDeveloper 11.1.1.5 + RCU 11.1.1.5 + WebLogic 10.3.5 + Application Development Runtime 11.1.1.5。

ADF Security保护的对象粒度级别可以达到Entity Object的行数据对象或EO的某个属性。
我将在《使用Enterprise Manager为ADF应用动态授权》应用的基础上做一些改动。

重要步骤说明:

1. 使能Entity Object的安全性
默认情况下,EO是没有被保护的,因此需要首先Enable你要保护的EO。
(1)保护整个ProductsBase EO
选择EO的Security属性,然后选中Update和Delete,表明只有拥有相应权限的人才可以修改和删除该EO。

(2)保护ProductsBase EO的一个Attribute:ListPrice
选择EO的ListPrice Attribute,然后选中Update,表明只有拥有相应权限的人才可以修改该Attribute。


2. 给角色授权
(1)在结构窗口中右键选中ProductsBase EO,然后选择“Edit Authorization”

(2)将修改和删除ProductsBase EO的权限授予productManager角色

(3)在结构窗口中右键选中ProductsBase EO的Attribute:ListPrice,然后选择“Edit Authorization”

(4)将修改ListPrice Attribute的权限授予productManager角色


3. 创建edit.jspx页面,修改和删除ProductBase。
注意,edit.jspx页面代码中没有任何与安全有关的EL表达式,比如在ListPrice InputText组件上和Delete按钮上都没有特别的设置。
因为在本实验中要测试的是要EO本身提供的细粒度安全性。

4. 修改Application Policies。

可以看出,角色manager和productManager都可以访问edit.jspx页面。
但是只有productManager角色可以修改和删除ProductsBase EO以及修改ListPrice Attribute。

5. 测试
(1)首先使用用户jack登录,jack拥有productManager角色。

(2)然后使用用户maping登录,maping拥有manager角色。

可以看出,虽然maping是经理,jack是maping的手下,但由于jack是产品经理,所以只有jack可以修改和删除ProductsBase EO以及修改ListPrice Attribute,而maping不可以。

6. 小结
与其它安全框架只能保护URL资源不同,ADF Security可以保护ADF-BC中的EO对象,甚至是EO的某个属性。
另外,视图层不需要为此修改任何原有代码,也就是说,业务服务层的安全可以“自动冒泡”到视图层,这实在太棒了 !

Project 下载:SecureApplication_11gPS4(secure_eo).7z

参考文献:
1. http://www.oracle.com/technetwork/issue-archive/2012/12-jan/o12adf-1364748.html

没有评论: