我的视图中有一个侧边栏设置图标,即时通讯对此有此要求。用户可以具有“ ROLE_MANAGE_SYSTEM_USER”权限或“ ROLE_MANAGE_USER_ROLE”权限,或两者都有。
如果用户具有“ ROLE_MANAGE_SYSTEM_USER”或“ ROLE_MANAGE_USER_ROLE”权限,则应显示设置图标。
如果用户同时拥有两个权限,则必须将其定向到URL映射('/ setting / systemUser / load')
如果用户仅具有“ ROLE_MANAGE_SYSTEM_USER”权限,则必须将其定向到URL映射(“ / setting / systemUser / load”)
如果用户仅具有“ ROLE_MANAGE_USER_ROLE”权限,则必须将其定向到URL映射(“ / setting / systemRole / load”)
为了实现这一点,我将代码结构如下:
<sec:authorize access="hasAnyRole('ROLE_MANAGE_SYSTEM_USER', 'ROLE_MANAGE_USER_ROLE')" var="anyrole">
<c:choose>
<c:when test="${anyrole}">
<a href="<c:url value="/setting/systemUser/load"/>">
<p><i class="icon ion-settings"></i></p>Settings
</a>
</c:when>
<c:otherwise>
<a href="<c:url value="/setting/systemRole/load"/>">
<p><i class="icon ion-settings"></i></p>Settings
</a>
</c:otherwise>
</c:choose>
</sec:authorize>
我发现很难用现有的JSTL和spring安全标签库知识来实现此逻辑。任何支持将不胜感激。
答案 0 :(得分:0)
可以从每个检查每个权限的语句中删除两个变量来满足此要求。参见以下代码:
<li class="${param.activeTab eq 'settings' ? 'active' : ''}">
<sec:authorize access="hasRole('ROLE_MANAGE_SYSTEM_USER')" var="isUser"/>
<sec:authorize access="hasRole('ROLE_MANAGE_USER_ROLE')" var="isRole"/>
<c:choose>
<c:when test="${isUser}">
<a href="<c:url value="/setting/systemUser/load"/>">
<p><i class="icon ion-settings"></i></p>Settings
</a>
</c:when>
<c:when test="${isRole}">
<a href="<c:url value="/setting/systemRole/load"/>">
<p><i class="icon ion-settings"></i></p>Settings
</a>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
</li>