JAVA权限控制PropertyTester

本文介绍了如何在Eclipse中通过PropertyTester为菜单设置查看权限,允许管理员和特定组的用户访问。Java类`CommonTester`扩展了`PropertyTester`,根据用户角色或小组进行权限判断。

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

java中可能通过PropertyTester来控制过滤某一个菜单的查看权限,比如只有admin用户能看到该菜单,只有开发组的成员可以看到该菜单等。

首先是在plugin.xml中设置extension
参数说明:
type:要检查的类别
namespace:当前权限过滤插件名称
properties:当前权限过滤插件可选择的属性,用英文逗号隔开
id:当前插件名称
class:对应的java类

<extension point="org.eclipse.core.expressions.propertyTesters">
		<propertyTester type="common.test.TestType" namespace="tester" properties="role,group" id="testTester" class="common.CommonTester"/>
</extension>

在eclipse中显示如下
在这里插入图片描述
在对应需要设置权限的菜单处添加如下代码(根据实际项目的格式设置,)
这里property是extension中的namespace和properties中的一个值,格式是namespace.property,下面的例子中是test.role

<visibleWhen>
	<adapt type="common.test.TestType">
       <or>
            <test forcePluginActivation="true" property="tester.role" value="系统管理员"></test>
       </or> 
   </adapt>
</visibleWhen>

extension中的class路径需要对应一个java类

public class CommonTester extends PropertyTester {
	
	public boolean test(Object adapt, String property, Object[] args, Object value) {
        try {
       		 // adapt对应当前对象值
        	if(!(adapt instanceof TestType)) {
        		return false;
        	}
        	// property是配置中设置的properties,这里是值是role
        	// value是配置中设置的value,这里的值是系统管理员
        	if("role".equals(property)){
        		String user_role = "XXX";  // 这里通过实际代码获取当前用户的角色
        		boolean compare_result = user_role .equals(value);
        		return compare_result ; // 如果能匹配上,菜单就会显示
        	}
        } catch(Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}

可以在此基础上做一下延伸,比如说系统管理员和开发组成员都可以看到该菜单

<visibleWhen>
	<adapt type="common.test.TestType">
       <or>
            <test forcePluginActivation="true" property="tester.role" value="系统管理员"></test>
            <test forcePluginActivation="true" property="tester.group" value="开发组"></test>
       </or> 
   </adapt>
</visibleWhen>

对应的java代码如下:

public class CommonTester extends PropertyTester {
	
	public boolean test(Object adapt, String property, Object[] args, Object value) {
        try {
       		 // adapt对应当前对象值
        	if(!(adapt instanceof TestType)) {
        		return false;
        	}
        	// property是role时,对应的值是系统管理员
        	// property是group时,对应的值是开发组
        	if("role".equals(property)){
        		String user_role = "XXX";  // 这里通过实际代码获取当前用户的角色
        		boolean compare_result = user_role .equals(value);
        		return compare_result ; // 如果能匹配上,菜单就会显示
        	}else if("group".equals(property)){
        		String user_group = "XXX";  // 这里通过实际代码获取当前用户的小组
        		boolean compare_result = user_group .equals(value);
        		return compare_result ; // 如果能匹配上,菜单就会显示
        	}
        } catch(Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}

即是系统管理员,又是开发组成员才可以看到该菜单

<visibleWhen>
	<adapt type="common.test.TestType">
	 <and>
	       <or> <!-- 可以在一个or标签里拼接更多的条件,当前标签满足一个即可-->
	            <test forcePluginActivation="true" property="tester.role" value="系统管理员"></test>
	       </or> 
	        <or> <!--不同的or在同一个and标签里时,每一个or标签都需要满足才会显示 -->
	            <test forcePluginActivation="true" property="tester.group" value="开发组"></test>
	       </or> 
        </and>
   </adapt>
</visibleWhen>

对应的java代码如下:

public class CommonTester extends PropertyTester {
	
	public boolean test(Object adapt, String property, Object[] args, Object value) {
        try {
       		 // adapt对应当前对象值
        	if(!(adapt instanceof TestType)) {
        		return false;
        	}
        	// property是role时,对应的值是系统管理员
        	// property是group时,对应的值是开发组
        	if("role".equals(property)){
        		String user_role = "XXX";  // 这里通过实际代码获取当前用户的角色
        		boolean compare_result = user_role .equals(value);
        		return compare_result ; // 如果能匹配上,菜单就会显示
        	}else if("group".equals(property)){
        		String user_group = "XXX";  // 这里通过实际代码获取当前用户的小组
        		boolean compare_result = user_group .equals(value);
        		return compare_result ; // 如果能匹配上,菜单就会显示
        	}
        } catch(Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值