需要外部关系的 Grails 插件

标签 grails grails-plugin

我昨天在 Grails 邮件列表上发布了此内容,但没有任何点击。我想我今天也可以在这里尝试一下。

我正在考虑编写一个 grails 插件,但是这个插件需要与帐户/用户对象有某种关系。但是,我不想在插件上强制使用特定的安全模型。例如,假设正在编写一个评论系统插件(我不是)。我有一个评论对象...

class Comment  {
   String comment
   Date dateCreated
   // etc etc
}

该评论缺少一些内容:

  1. 谁添加了评论
  2. 评论添加到的内容。

我想首先关注#1。因此,有人可能正在使用 Spring 安全插件并使用默认的 Person 对象,或者他们可能将其更改为 User。谁知道。有没有任何人都可以想到的方法来配置这种关系,而无需在插件中对其进行硬编码?

我考虑过的一件事是让 grails 应用程序扩展插件的域类来添加这种关系。所以我可能会做一些类似的事情...

class ArticleComment extends Comment {
    static belongsTo = [user:User]
}

但在较大的插件中,这可能有很多继承要求。不是世界末日,只是寻找其他可能的选择。

最佳答案

您可以使用 Commentable plugin 使用的相同技术:

您的插件的用户需要在 Config.groovy 中声明一个闭包来评估登录的用户:

grails.myplugin.user.evaluator = { session.user }

您可以在插件代码中使用类似的内容来调用用户配置的闭包:

def evaluateUser() {
    def evaluator = grailsApplication.config.grails.myplugin.user.evaluator
    def user 
    if(evaluator instanceof Closure) {
        evaluator.delegate = this
        evaluator.resolveStrategy = Closure.DELEGATE_ONLY
        user = evaluator.call()
    }

    if(!user) {
        throw new Exception("No [grails.myplugin.user.evaluator] setting defined or the evaluator doesn't evaluate to an entity. Please define the evaluator correctly in grails-app/conf/Config.groovy")
    }
    if(!user.id) {
        throw new Exception("The evaluated user is not a persistent instance.")
    }
    return user
}

关于需要外部关系的 Grails 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5266025/

相关文章:

grails - 最佳实践-通过静态字段获取域对象吗?

spring - gwt + grail ..优点和缺点

grails - Grails 3:_Events.groovy中的eventCreateWarStart的替代品是什么

grails - 在 grails 3.x 中寻找集成

excel - 如何在Grails excel-export/apache-POI插件中设置背景颜色?

validation - 如何停止grails清除自定义验证错误

grails - SpringSource Tool Suite中的Grails扩展错误

grails - Grails插件-脚手架中 Controller 的动态方法不起作用

grails - 在 Cloud Foundry 中预填充 grails 应用程序 mysql 数据库

Grails 3.2.4 : custom authentication filter not called