sec:在js中授权将html附加为字符串不起作用

问题描述 投票:0回答:1

我是 JS HTML JQuery ajax 新手,目前我的 HTML 案例有问题。为了最准确地描述我现在面临的情况,我首先会谈谈这个过程。该项目是关于 SpringMVC + Thymeleaf & Thymeleaf Security5 + Spring Security。

  • 用户登录时,具有 USER 角色的用户将看不到标签
    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>
  • 但是在我对内容表进行排序后,调用 Ajax JQuery 来重新创建视图,如下所示:
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 角色的用户。 我使用的版本:

  • SpringBoot版本:2.7.14
  • thymeleaf-extras-springsecurity5
  • java 版本:1.8
javascript java html ajax spring-thymeleaf
1个回答
1
投票

您的代码中似乎已经有一个名为 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
。这应该可以帮助您根据不同的角色控制链接的可见性。

© www.soinside.com 2019 - 2024. All rights reserved.