RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1555383
Accepted
Дмитрий
Дмитрий
Asked:2023-12-10 00:45:12 +0000 UTC2023-12-10 00:45:12 +0000 UTC 2023-12-10 00:45:12 +0000 UTC

视图中的 Thymeleaf 访问限制表达式

  • 772

我正在使用 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">.

但我不知道如何针对我的情况正确地重新表述这一点。谢谢。

spring-security
  • 1 1 个回答
  • 33 Views

1 个回答

  • Voted
  1. Best Answer
    Byb
    2023-12-10T01:49:01Z2023-12-10T01:49:01Z

    好吧,我们假设您已经具有Authentication从实现 的类中提取实际安全用户的函数UserDetails。包括检查用户是否完全登录等等。

    在这种情况下,在返回带有评论的页面的控制器中,您可以将提取的用户传递到 Thymeleaf 表单,或者更好的是,如果不需要有关他的一般信息,只需要他的 ID:

    @RequestMapping("/comments")
    public String comments(Model model, Authentication authentication) {
        YourSecurityUser user = extractCurrentUserOrNull(authentication); // примерно
        model.addAttribute("currentUserId", user.getId());
        model.addAttribute("comments", comments); // условно List<Comment>
        return "comments";
    }
    

    现在,Thymeleaf 表单包含有关将继续查看该页面的用户 ID 的信息。当然,除此之外,它还可以对评论列表进行操作。每个评论都有一个作者,最有可能的是,您可以得到如下内容:

    comment.author
    

    因此,它的标识符:

    comment.author.id
    

    我已经使用 Thymeleaf 的语法编写了这个。

    现在,直接在视图中,我们需要检查下一条评论的作者 ID 是否与传递的当前用户 ID 匹配。如果存在匹配,我们将显示编辑按钮,否则我们将隐藏它。

    如果您使用标准的视图来处理评论列表th:each,那么您可以执行以下操作:

    <div th:each="each : ${comments}">
        ...
        <div th:if="${currentUserId != null AND each.author.id == currentUserId}">
    

    最后,角色和权利与之无关。这里所有的工作都只与确定作者身份有关。不过,如果你想建立一个非常细致的角色和权限系统,你可以例如按类型创建权限EDIT_OWN_COMMENTS,并按照我上面写的那样检查用户是否具有此权限。

    • 1

相关问题

  • 添加身份验证时页面崩溃并出现 500 错误

  • 如何使用 Spring Boot+JPA 获取当前用户

  • 如何使密码自动加密为 12 个字符的字符串?

  • 微服务架构中使用jwt的算法

  • 如何在 SpringSecurity 中将用户数据写入日志文件

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5