问题描述
我试图只为发表评论的人和管理员显示删除按钮,但是 当我尝试使用 if 语句或 sec:authorize 隐藏它时,解析模板时出错。 我尝试分别使用每个 if 条件来制作两个单独的按钮,效果很好,但是当我使用 OR 将它们组合在一起时,出现了错误。
这是我目前所写的。 // HTML
<a th:if="${c.email}==${namePrincipal} or hasRole('ADMIN')" href="#" class="btn btn-secondary" style="background-color: #8db8e0; margin-left: 200px;">Delete</a>
错误信息: org.thymeleaf.exceptions.TemplateInputException: 模板解析过程中发生错误(模板:“类路径资源 [templates/show-comments.html]”)
引起:org.attoparser.ParseException:无法解析为表达式:“${c.email}==${namePrincipal} 或 hasRole('ADMIN')”(模板:“show-comments” - 第 34 行,第 20 列)
解决方法
根据角色授予权限,使用sec:authorize
<div sec:authorize="hasRole('ROLE_ADMIN')">
<div th:if="${#authentication.principal.username} eq ${c.getEmail()}">
<a href="#" class="btn btn-secondary" style="background-color: #8db8e0; margin-left: 200px;">Delete</a>
</div>
</div>