我是 JS HTML JQuery ajax 新手,目前我的 HTML 案例有问题。为了最准确地描述我现在面临的情况,我首先会谈谈这个过程。该项目是关于 SpringMVC + Thymeleaf & Thymeleaf Security5 + Spring Security。
sec:acthorize
,一开始工作正常当具有 USER 角色的用户加载到页面时,原始代码首先工作正常(意味着不显示具有 USER 角色的用户的标签):
<tbody id="tableBody">
<tr>
<td>
<a sec:authorize="hasAuthority('ADMIN')" href="#" th:attr="onclick='showConfirmationPopup(\'' + ${user.userName} + '\');'" class="delete" title="Delete" data-toggle="tooltip"></a>
</td>
</tr>
</tbody>
function populateTable(data) {
$("#tableBody").empty();
var row = $("<tr>");
var actionColumn = $("<td>");
actionColumn.append("<a sec:authorize=\"hasAuthority('ADMIN')\" href='/api/update/" + user.userName + "' class='settings' title='Update' data-toggle='tooltip'></a>");
row.append(actionColumn);
$("#tableBody").append(row);
}
结果是,尽管当前身份验证用户具有 USER 角色,但它仍然显示标签。
调用上述函数的代码是:
$.ajax({
url: "/rest/api/pagination-by-search",
type: "GET",
data: formData,
success: function(data) {
populateTable(data);
}
});
function populateTable(data) {
$("#tableBody").empty();
var row = $("<tr>");
var actionColumn = $("<td>");
actionColumn.append("<a sec:authorize=\"hasAuthority('ADMIN')\" href='/api/update/" + user.userName + "' class='settings' title='Update' data-toggle='tooltip'></a>");
row.append(actionColumn);
$("#tableBody").append(row);
}
我尝试记录用户的角色,它按预期记录了角色 USER。但是,该视图仍然显示具有 USER 角色的用户。 我使用的版本:
您的代码中似乎已经有一个名为 user 的 Thymeleaf 对象。要根据该对象的角色属性有条件地显示链接并使用 Spring Security 对其进行授权,您可以同时使用
th:if
和 sec:authorize
属性。
以下是修改代码的方法:
actionColumn.append("<a th:if=\"${user.role == 'ADMIN'}\" sec:authorize=\"hasAuthority('ADMIN')\" href='/api/update/'" + ${user.userName} + " class='settings' title='Update' data-toggle='tooltip'></a>");
此代码仅在用户对象的角色属性设置为
'ADMIN'
时才会渲染链接,并且还将使用 Spring Security 的 'ADMIN'
检查当前经过身份验证的用户是否具有权限 sec:authorize
。这应该可以帮助您根据不同的角色控制链接的可见性。