gpt4 book ai didi

grails - 在客户端或服务器端拦截 Grails GSP 操作

转载 作者:行者123 更新时间:2023-12-04 02:09:28 24 4
gpt4 key购买 nike

Grails 2.4.5 在这里。我正在尝试为我的 GSP 实现以下 UX 行为:

  • 如果用户有点击按钮的权限,那么他们可以这样做;然而
  • 如果用户没有点击按钮的权限,那么当他们点击按钮时,屏幕顶部会出现一条横幅消息(闪烁?),背景为玫瑰色/粉红色/红色,说明“您没有权限”采取此行动'

  • 为了确定用户是否具有所需的权限,我可以访问来自 Groovy 和 GSP/taglib 层的功能。

    从 Groovy/ Controller 层:
    SecurityUtils.hasPermission(String permission)
    Ex: SecurityUtils.hasPermission('UPDATE_BUZZ')

    从 GSP/taglib 层:
    <sec:hasPermission permission="<permission name>">???</sec:hasPermission>
    Ex: <sec:hasPermission permission="UPDATE_BUZZ">???</sec:hasPermission>

    因此,鉴于这两种可用的访问检查机制,并给出以下 Controller :
    class FizzController {
    BuzzService BuzzService

    def buzz() {
    SomeData dataModel = buzzService.getModel(params)
    render(view: 'buzz', model: [ dataModel: dataModel ])
    }
    }

    ...哪里 buzz.gsp是:
    <!-- Lots of HTML/GSP here -->
    <g:submitButton name="update" value="Update" />
    <!-- Lots more HTML/GSP down here -->

    鉴于所有这些,我的问题是: 我应该如何/在哪里:(1)响应' update ' 按钮的点击处理程序,(2) 执行访问检查,以及 (3) 呈现错误/横幅/Flash 消息? 代码示例(甚至是伪代码)将是最棒的!

    最佳答案

    我根据您的问题假设您不想要页面刷新,甚至可能不需要 ajax 调用。因为如果你这样做了,那么展示横幅并不困难。您只希望它的行为类似于 JavaScript 客户端验证(UX 明智的)。如果这个假设是错误的,那么不要阅读和使用 Aramiti 的解决方案。否则继续。

    第一个解决方案

    您可以创建一个将权限作为输入的标签。就像是

    <myTagLib:flashOnNoPermission permission="PERM" name="name" value="value">
    </myTagLib:flashOnNoPermission>

    这个标签的定义可以使用 sec:hasPermission 检查权限.然后这个标签可以只呈现一个包含这样的模板
    <hidden flash message>
    <g:submitButton name="name" value="value" onclick="<unhide flash if no permission>"/>

    基本上是在 grails 按钮上创建一个包装器,以便您可以在按钮的同时使用 Flash 消息。

    问题
  • 如果用户在屏幕上时更改了用户的权限怎么办? Ajax 会处理这个问题,但这不会。加载屏幕后,一切都已修复。
  • 横幅与按钮一起

  • 第二种解决方案

    添加普通 div在您的布局顶部,用于显示 Flash 消息。然后创建一个类似于上面的标签。只是不要在呈现的模板中添加 flash 消息。就像是
        <g:submitButton name="name" value="value" onclick="<unhide flash at top of layout if no permission>"/>

    问题
  • 如果用户在屏幕上的权限被更改怎么办?

  • 不知道为什么你需要 onclick 处理程序,但如果没有理由只是 Aramiti 的解决方案。

    关于grails - 在客户端或服务器端拦截 Grails GSP 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34851889/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com