我正在使用 Spring Security 和 Thymeleaf 在 Spring Boot 中制作一个 Web 应用程序。视图是带有可以添加、查看、编辑和删除的评论的页面。我需要在视图中设置限制,以便在每个评论下的评论页面上,仅针对评论作者的用户显示“编辑评论”按钮,但我不知道如何在 Thymeleaf 中表达这一点。
我在网上找到了这些设计:
<div th:if="${#authorization.expression('hasRole(''ROLE_ADMIN'')')}">
ADMIn section
</div>
<div sec:authentication="name">
<div sec:authentication="principal.authorities">.
但我不知道如何针对我的情况正确地重新表述这一点。谢谢。
好吧,我们假设您已经具有
Authentication
从实现 的类中提取实际安全用户的函数UserDetails
。包括检查用户是否完全登录等等。在这种情况下,在返回带有评论的页面的控制器中,您可以将提取的用户传递到 Thymeleaf 表单,或者更好的是,如果不需要有关他的一般信息,只需要他的 ID:
现在,Thymeleaf 表单包含有关将继续查看该页面的用户 ID 的信息。当然,除此之外,它还可以对评论列表进行操作。每个评论都有一个作者,最有可能的是,您可以得到如下内容:
因此,它的标识符:
我已经使用 Thymeleaf 的语法编写了这个。
现在,直接在视图中,我们需要检查下一条评论的作者 ID 是否与传递的当前用户 ID 匹配。如果存在匹配,我们将显示编辑按钮,否则我们将隐藏它。
如果您使用标准的视图来处理评论列表
th:each
,那么您可以执行以下操作:最后,角色和权利与之无关。这里所有的工作都只与确定作者身份有关。不过,如果你想建立一个非常细致的角色和权限系统,你可以例如按类型创建权限
EDIT_OWN_COMMENTS
,并按照我上面写的那样检查用户是否具有此权限。