2015-06-29 71 views
1

我對Apache Shiro相當陌生,但希望這是一個簡單的問題。我花了相當長的時間尋找答案,但找不到答案。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> 

不過,我使用這樣具有類似於特定權限通配符權限「管理:任務:更新」,並不意味着像「管理員」通用許可,所以「你沒有管理員權限」信息總是顯示。

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

有一種簡單的方法來做到這一點,或者我需要定義一個新的權限與「管理頁面的權利」,並確保任何角色哪些獲得使用任何鏈接的權利也需要這個新的許可? (這聽起來像維護麻煩)。

回答

0

四郎標籤內使用核心標記庫一樣

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