【问题标题】:Shiro page level accessShiro 页面级访问
【发布时间】:2015-09-16 13:59:45
【问题描述】:

我对 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”这样的通用权限,所以总是显示“你没有管理员权限”消息。

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

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

【问题讨论】:

    标签: permissions shiro


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 2021-04-17
      • 2016-08-26
      • 2012-09-28
      • 2014-06-26
      • 2014-04-23
      • 2021-07-14
      相关资源
      最近更新 更多