sec:authorize + thymeleaf的问题

时间:2015-03-16 12:32:06

标签: html5 spring thymeleaf

我认为我越来越接近解决方案,但我仍然存在。我在代码中改变了一些东西。这是实际的代码:

<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())}"无法正常工作。

有人可以请你帮忙???

1 个答案:

答案 0 :(得分:0)

所以我解决了我自己的问题,答案是百里香叶有一个错误,不能处理正确的类内部信息。为了解决这个问题,我想出了这个解决方案:

<div th:if="${#authorization.expression('hasAnyRole(''__${menuItem.getRoles()}__'')')}">

这不是一件好事,但现在可以工作:)