grails - 完全覆盖或使用前缀覆盖 Grails 脚手架 URL

标签 grails scaffolding

我有一个定义了 staticscaffold = true 的 Controller ,以及一些自定义操作。

我想确保只有登录用户和 ADMIN 类型的用户(我们域中的某些 Enum 值)才能访问它。为了实现这一点,我实现了一个 grails 过滤器,该过滤器映射到 /admin/** URI 空间,但当然,当脚手架不在此处时,相关域/ Controller 的 URI 也不会被映射到该空间。我为显示/编辑/创建操作添加了自定义、命名的 URL 映射(这些操作直接工作并委托(delegate)给脚手架层),但最终我得到了两个专用于此目的的 URI 上下文。

我更希望能够对脚手架 Controller 说“使用此 URI 作为所有 URI 的前缀”并完成它,但搜索文档和网络通常并没有被证明很有帮助。

有什么想法吗?

最佳答案

支架 Controller 使用标准 taglib 调用生成所有 URL,这对 URL 映射敏感。因此,如果您的 URL 映射正确,那么它应该可以正常工作。如果您想将 MyDomainController 映射到 /admin 下,那么您需要类似

class UrlMappings {
  static mappings = {
    "/$controller/$action?/$id?" {
      constraints {
        controller(validator:{
          // make sure this mapping doesn't apply to the MyDomainController,
          // so it will only be accessible via the protected /admin URL
          return it != "myDomain"
        })
      }
    }

    // special rule for the MyDomainController
    "/admin/myDomain/$action?/$id?"(controller:"myDomain")
  }
}

您可以使用any of the usual Grails constraint types在 URL 映射上,因此您可以通过白名单进行限制

controller(inList:['foo', 'bar'])

或者通过正则表达式

// exclude all controllers whose name starts "sec", e.g. secUser, secRole, ...
controller(matches:/(?!sec).*/)

关于grails - 完全覆盖或使用前缀覆盖 Grails 脚手架 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14337471/

相关文章:

javascript - 没有找到 Eclipse 图像资源?

grails - Cereal 未运行

grails - findAll()HQL不返回grails中的分页列表

grails - 仅使用脚手架,Grails错误无法创建Bean

mysql - Windows 7 上 ruby​​ on rails 3 的问题

hibernate - Grails域delete()是否更新事务中子代的数量

mysql - Scaffold DbContext 字符串参数 'sql' 不能为空

java - 简单的 java 脚手架式 CRUD 生成器

forms - 将_form.gsp模板从Grails 2导入到Grails3

sql - 在 Grails 2.3.x 中执行原始 SQL 查询时如何指定备用数据源?