我昨天在 Grails 邮件列表上发布了此内容,但没有任何点击。我想我今天也可以在这里尝试一下。
我正在考虑编写一个 grails 插件,但是这个插件需要与帐户/用户对象有某种关系。但是,我不想在插件上强制使用特定的安全模型。例如,假设正在编写一个评论系统插件(我不是)。我有一个评论对象...
class Comment {
String comment
Date dateCreated
// etc etc
}
该评论缺少一些内容:
- 谁添加了评论
- 评论添加到的内容。
我想首先关注#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/