【发布时间】: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