尝试使用 Spring Security 阻止未经授权的用户(不是所有者也不是管理员)访问下拉菜单,传递“所有者”对象 - 当前查看列表的所有者:
<span sec:authorize="hasRole('ADMIN') or #authentication.principal.equals(#owner)">
<form class="form-horizontal" th:action="@{/todos/{id}/add(id = ${todo.id})}" method="get">
<select class="form-control" name="user_id" id="users">
<option>Select collaborator...</option>
<option th:each="user : ${users}" th:value="${user.id}"
th:text="${user.firstName + ' ' + user.lastName}"></option>
</select>
<input align="right" class="btn btn" type="submit" value="Add">
</form>
</span>
它适用于管理员,但拒绝显示非管理员所有者的列表
<h2 th:text="${owner.equals(#authentication.principal)}"></h2>
打印出真。我如何解决它?提前致谢,
看起来问题与您如何比较代码中的两个对象有关:
owner
对象和 authentication.principal
对象。
您可以尝试使用 == 运算符,它比较对象引用而不是它们的值。
<span sec:authorize="hasRole('ADMIN') or #authentication.principal == #owner">
<form class="form-horizontal" th:action="@{/todos/{id}/add(id = ${todo.id})}" method="get">
<select class="form-control" name="user_id" id="users">
<option>Select collaborator...</option>
<option th:each="user : ${users}" th:value="${user.id}"
th:text="${user.firstName + ' ' + user.lastName}"></option>
</select>
<input align="right" class="btn btn" type="submit" value="Add">
</form>
</span>
我希望这有帮助:)
以防其他人遇到同样的问题,我通过使用“th:if”而不是 sec:authorize 来修复它。
<span th:if="${(#authentication.principal.id == owner.id) or (#authentication.principal.getRole().getName().equals('ADMIN'))}">
<form class="form-horizontal" th:action="@{/todos/{id}/add(id = ${todo.id})}" method="get">
<select class="form-control" name="user_id" id="users">
<option>Select collaborator...</option>
<option th:each="user : ${users}" th:value="${user.id}"
th:text="${user.firstName + ' ' + user.lastName}"></option>
</select>
<input align="right" class="btn btn" type="submit" value="Add">
</form>
</span>