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