我是Apache Shiro的新手,但希望这是一个简单的问题。我花了相当多的时间寻找答案,但找不到。
我有一个作为JSP的管理页面,我想要显示基于用户权限的各种链接。例如:
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
<shiro:hasPermission name="admin:user:update">
<li class="admin-link update-user">Update Users</li>
</shiro:hasPermission>
<shiro:hasPermission name="admin:role:update">
<li class="admin-link update-role">Update Roles</li>
</shiro:hasPermission>这很好用。但是,如果用户对该页面上的链接没有权限,我想显示一条消息。我不关心他们有权访问哪个链接,任何链接都会停止显示消息。
我想要做的是:
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
<shiro:hasPermission name="admin">
<shiro:hasPermission name="admin:user:update">
<li class="admin-link update-user">Update Users</li>
</shiro:hasPermission>
<shiro:hasPermission name="admin:role:update">
<li class="admin-link update-role">Update Roles</li>
</shiro:hasPermission>
</shiro:hasPermission>
<shiro:lacksPermission name="admin">
Sorry, you do not have admin rights
</shiro:lacksPermission>但是,我使用的是通配符权限,所以拥有像" admin :role:update“这样的特定权限并不意味着拥有像"admin”这样的通用权限,所以总是会显示"you‘s not have admin rights“消息。
(即:new WildcardPermission("admin").implies(new WildcardPermission("admin:user:update")为真,但new WildcardPermission("admin:user:update").implies(new WildcardPermission("admin")为假)
有没有一种简单的方法可以做到这一点,或者我需要定义一个具有“管理页面权限”的新权限,并确保任何获得使用任何链接的权限的角色也需要这个新权限?(这听起来像是维护的麻烦)。
发布于 2015-07-02 17:41:38
在shiro标签中使用核心标签库,比如
<c:set var="allowed" value="false"/>
<shiro:hasPermission name="admin">
<shiro:hasPermission name="admin:user:update">
<c:set var="allowed" value="true"/>
<li class="admin-link update-user">Update Users</li>
</shiro:hasPermission>
<shiro:hasPermission name="admin:role:update">
<c:set var="allowed" value="true"/>
<li class="admin-link update-role">Update Roles</li>
</shiro:hasPermission>
</shiro:hasPermission>
<c:if test="${not allowed}" >
Sorry, you do not have admin rights
</c:if>https://stackoverflow.com/questions/31126976
复制相似问题