我认为我越来越接近解决方案,但我仍然存在。我在代码中改变了一些东西。这是实际的代码:
<nav>
<ul id="topMenu">
<li th:each="menuItem : ${@mainMenu.getMenuItems()}">
<div>
<a th:text="${menuItem.getLabel()}" th:href="${menuItem.getUrl()}" th:sec:authorize="${hasAnyRole(menuItem.getRoles())}"></a>
</div>
<ul class="topSubMenu" th:if="${menuItem.getSubItems()} != null">
<li th:each="subMenu : ${menuItem.getSubItems()}" th:class="${subMenu.getSubItems()} !=null ? 'hpit-topCategory'">
<div>
<a th:text="${subMenu.getLabel()}" th:href="${subMenu.getUrl()}" style="display:block"></a>
</div>
<ul class="topSubMenu" th:if="${subMenu.getSubItems()} != null">
<li th:each="subCategory : ${subMenu.getSubItems()}">
<div>
<a th:text="${subCategory.getLabel()}" th:href="${subCategory.getUrl()}"></a>
</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
我使用了类似的用户:
<user name="david-gh" password="p" authorities="ROLE_USER,ROLE_ADMIN,ROLE_BLAH" />
和其他用户:
<user name="david-gh2" password="p" authorities="ROLE_USER,ROLE_ADMIN" />
菜单加载为:
<bean class="web.data.MenuItem">
<constructor-arg value="Home" />
<constructor-arg value="/" />
<constructor-arg value="ROLE_USER" />
</bean>
<bean class="web.data.MenuItem">
<constructor-arg value="Assessment" />
<constructor-arg value="###" />
<constructor-arg value="ROLE_BLAH" />
<constructor-arg>
<list>
<bean class="web.data.MenuItem">
<constructor-arg value="New Assessment Request" />
<constructor-arg value="/requestClient" />
<constructor-arg value="ROLE_USER" />
</bean>
</list>
</constructor-arg>
</bean>
所以应该有的行为是:David-gh
应该会看到除david-gh2
之外的所有内容都看不到评估。现在我看到了两件事,所以我的猜测就是命令行:
<a th:text="${menuItem.getLabel()}" th:href="${menuItem.getUrl()}" th:sec:authorize="${hasAnyRole(menuItem.getRoles())}"></a>
它无法正常工作,因为th:sec:authorize="${hasAnyRole(menuItem.getRoles())}"
无法正常工作。
有人可以请你帮忙???
答案 0 :(得分:0)
所以我解决了我自己的问题,答案是百里香叶有一个错误,不能处理正确的类内部信息。为了解决这个问题,我想出了这个解决方案:
<div th:if="${#authorization.expression('hasAnyRole(''__${menuItem.getRoles()}__'')')}">
这不是一件好事,但现在可以工作:)