Permissions Shiro页面级访问

Permissions Shiro页面级访问,permissions,shiro,Permissions,Shiro,我对ApacheShiro相当陌生,但希望这是一个简单的问题。我花了相当多的时间寻找答案,但找不到答案 我有一个作为JSP的管理页面,我想根据用户权限显示各种链接。例如: <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> <shiro:hasPermission name="admin:user:update"> <li class="admin-link update-user"

我对ApacheShiro相当陌生,但希望这是一个简单的问题。我花了相当多的时间寻找答案,但找不到答案

我有一个作为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 not have admin rights”消息始终显示

    (即:
    new wildcardpowmission(“admin”)。暗示(new wildcardpowmission(“admin:user:update”)
    为true,但
    new wildcardpowmission(“admin:user:update”)。暗示(new wildcardpowmission(“admin”)
    为false)


    有没有一个简单的方法可以做到这一点,或者我需要用“管理页面权限”定义一个新的权限,并确保任何获得使用任何链接权限的角色也需要这个新权限?(这听起来像是一个维护问题)。

    在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>
    
    
    
  • 更新用户
  • 更新角色 对不起,您没有管理员权限