hasRole()内的:删除不起作用

时间:2017-11-10 14:45:01

标签: java spring-security thymeleaf spring-el

我想禁用特定链接但保留其文本,使其显示为已禁用。我试图放置一个:在锚标签内删除一定条件。我在ThymeLeaf教程页面上找到了这个:

<a href="/something" th:remove="${condition}? tag">Link text not to be removed</a>

基于我尝试这样做:

<li>
    <a th:href="@{/config/mod/}"
       th:remove="${#authorization.expression('hasRole(''VIEW_MODULE_STATUS'')')}? tag">
        <i class="fa fa-gear"></i>&nbsp;[[#{webadmin.view.config.module.title.short}]]
    </a>
</li>

其中VIEW_MODULE_STATUS是角色。这种情况似乎不起作用,我无法理解为什么。

仅供参考:我在锚标签中使用了sec:authorize="hasRole('VIEW_MODULE_STATUS')",它运行正常。我想避免这种方法,因为它完全删除了文本和链接。是否有其他方法可以禁用链接并使用ThymeLeaf保留文本?

(我使用的是ThymeLeaf 3.0)

1 个答案:

答案 0 :(得分:1)

在表达式th:remove="${#authorization.expression('hasRole(''VIEW_MODULE_STATUS'')')}? tag"

中使用三元运算符时出错

三元运算符的格式为condition? 'true' : 'false'。所以你必须更新你的表达。然后,您无法停用<a>代码,您唯一可以做的就是将其href属性更新为#javascript:void(0);,以便它不会执行任何操作。你可以这样做,如下所示:

th:href="${#authorization.expression('hasRole(''VIEW_MODULE_STATUS'')') ? '/something' : '#'}"