您的位置:首页 > 其它

shiro实现HasAnyPermission 标签效果

2015-07-29 18:15 2161 查看
在使用shiro 的时候发现,有hasAnyRole 却没有hasAnyPermission的标签,感觉很疑惑,有时我控制页面的显示的时候就是需要这种,比如:

一个菜单下面有3个子菜单

|-菜单栏目一

|——-|–子栏目一

|——-|–子栏目二

像这样,这时,假设子栏目一显示的条件是hasPermission p1, 子栏目二是p2,那么我们可以认为父级(菜单栏一,只需要在有p1或者p2的情况下就显示),这时就需要一个 类似hasAnyRole的标签-hasAnyPermssion ( 当然,实现这种需要还有其他的方法,我暂时没有想到,用shiro 不是很久。。。。)

具体实现时候,实现是一个HasAnyPermissionTag 类,然后把shiro-web.jar 里面的shiro.tld 里面加入自己定义的标签就行

HasAnypermissionTag 代码如果(查看HasAnyRoleTag 就发现,类似的写法)

package org.apache.shiro.web.tags;

import org.apache.shiro.subject.Subject;

/**
* 扩展标签,具有列出权限中的任意一个
* @author yehuan
*
*/
public class HasAnyPermissionTag extends PermissionTag {

/**
*
*/
private static final long serialVersionUID = 1L;

public HasAnyPermissionTag() {

}

protected boolean showTagBody(String permissions) {
boolean hasAnyPermissions = false;

Subject subject = getSubject();

if (subject != null) {
for (String role : permissions.split(",")) {

if (subject.isPermitted(role.trim())) {
hasAnyPermissions = true;
break;
}
}
}
return hasAnyPermissions;
}

}


在shiro.tld中加入自己的标签

<tag>
<name>hasAnyPermission</name>
<tag-class>org.apache.shiro.web.tags.HasAnyPermissionTag</tag-class>
<body-content>JSP</body-content>
<description>Displays body content only if the current Subject (user)
'has' (implies) the specified permission (i.e the user has the specified ability).
</description>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>


在这个文件中加入一个新的标签就可以了,tag-class 对应自己写的标签就行了。

在要使用的地方

<shiro:hasAnyPermission ame=”p1,p2”></shiro:hasAnyPermission> 就可以 了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shiro Permission