Shiro页面级访问

时间:2015-06-29 23:02:06

标签: permissions shiro

我对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”这样的通用权限,因此始终会显示“您没有管理员权限”消息。 / p>

(即: new WildcardPermission("admin").implies(new WildcardPermission("admin:user:update")为真,但new WildcardPermission("admin:user:update").implies(new WildcardPermission("admin")为假)

是否有一种简单的方法可以执行此操作,或者是否需要使用“管理页面权限”定义新权限,并确保获得使用任何链接的权限的任何角色也需要此新权限? (这听起来像维护麻烦)。

1 个答案:

答案 0 :(得分:1)

在shiro标签内使用核心标签lib,如

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