使用userGrantedResource和userGrantedPermission表达式

本文详细介绍了在ADF Web应用中实现安全配置与权限管理的过程,包括设置实体安全、增加自定义资源权限、使用程序判断用户权限以及通过不同用户登录进行权限测试的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行环境:JDeveloper 11.1.2.1.0 + Oracle Database 10g Express Edition 10.2.0.1。

本来想在上一个实验的基础上继续做本实验,但是遇到一些问题,因此切换到JDeveloper 11.1.2.1.0开发环境。
不知道是不是因为JDeveloper 11.1.1.5的Bug或者因为使用了Database作为Policy Store。待查。
本实验在建立《 为ADF Web应用增加安全 》的基础之上。

重点步骤说明:

1. 设置ProductBase EO的安全
说明:实体的安全是扩展ADFPermission类而来的。
(1)打开read、update、delete的权限。

(2)给staff授予read权限。

(3)给supplier授予read、update、delete权限。

(4)修改edit.jsf页面,增加一个按钮:TestEnitityPermission,绑定相应的EL。
实体的安全是扩展ADFPermission类而来的,对应的EL写法如下:
<af:commandButton text="TestEnitityPermission" id="cb7" disabled="#{!securityContext.userGrantedPermission['permissionClass=oracle.adf.share.security.authorization.EntityPermission;target=model.ProductsBase;action=update']}"/>

2. 增加自定义的ResourcePermission
这个特性意味着你可以增加自己的Permission,你能想出的灵活的权限也就是这样了吧!
(1)在Resource Grants界面,点击Resource Type旁边的绿色的加号,增加一个ResourcePermission:
这里仅仅是出于测试的目的,自定义一个ButtonPermission,实际开发中不需要为Button专门定义Permission。
因为完全可以用已有的EL表达式绑定到Button的各个属性。

(2)把ButtonPermission权限授予supplier角色:

(3)修改edit.jsf页面,增加一个按钮:TestResourcePermission,绑定相应的EL。
自定义的ResourcePermission是扩展ResourcePermission类而来的,对应的EL写法如下:
<af:commandButton text="TestResourcePermission" id="cb8" disabled="#{securityContext.userGrantedResource['resourceType=ButtonPermission;resourceName=Button;action=disable']}"/>
注意,这个表达式的意思是拥有disable的角色返回true,因此就会disable这个Button。

3. 使用不同的用户登录测试
(1)使用achen登录,achen拥有supplier角色,因此achen拥有read、update、delete ProductBase实体对象和disable ButtonPermission的权限。

可以看出achen可以点击Delete和TestEntityPermission按钮,不可以点击TestResourcePermission按钮。
(2)使用sking登录,sking拥有staff角色,因此sking只拥有read ProductBase实体对象的权限。

可以看出sking不可以点击Delete和TestEntityPermission按钮,可以点击TestResourcePermission按钮。

4. 如何使用程序判断用户是否具有某个Permission?
(1)使用程序判断用户是否具有某个ResourcePermission?
public void testResourcePermission() {
String resourceType = "ButtonPermission";
String resourceName = "Button";
String action = "disable";

SecurityContext securityCtx = ADFContext.getCurrent().getSecurityContext();
ResourcePermission resourcePermission = new ResourcePermission(resourceType, resourceName, action);
boolean userHasPermission = securityCtx.hasPermission(resourcePermission);
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$ ResourcePermission " + userHasPermission);
}

(2)使用程序判断用户是否具有某个ADFPermission,如EntityPermission?
public void testEntityPermission() {
String target = "model.ProductsBase";
String action = "update";

SecurityContext securityCtx = ADFContext.getCurrent().getSecurityContext();
EntityPermission entityPermission = new EntityPermission(target, action);
boolean userHasPermission = securityCtx.hasPermission(entityPermission);
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$ EntityPermission " + userHasPermission);
}
(3)运行edit.jsf,分别使用不同用户登录,并点击TestPermission按钮
使用用户achen登录后,点击TestPermission按钮,输出了两个true。
使用用户sking登录后,点击TestPermission按钮,输出了两个false。

Project 下载:SecureApplication(userGrant).7z

http://maping930883.blogspot.com/2012/05/adf127usergrantedresourceusergrantedper.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值