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;
}
}