Groovy帮助...关于def编辑和控制器

时间:2011-04-17 17:26:34

标签: groovy controller dns closures edit

默认情况下def edit = {}包含哪些内容?你看,我正在关注一本书,但事实证明它使用的是旧版本,这就是为什么有些代码不起作用的原因。我有这段代码:

def edit= {
def user = User.get(params.id)
    if (session?.user?.id == null){
        flash.message = "You have to login first before editting your stuff."
        redirect(action:'login')
        return
    }else if(session?.user?.id != params.id) {
        flash.message = "You can only edit yourself."
        redirect(action:list)
        return
    }else{
        //What should I put here?
}

}

它已经起作用了。如果用户在未登录的情况下单击编辑,则会将其重定向到登录页面。否则,如果他登录,那么他只能自己编辑。我应该在“其他”条款上加注什么?它应该已经应该已经允许用户编辑他的东西了,但我真的不知道如何实现我想要的东西。 :(

如果有人可以共享默认的edit代码段,那就太棒了。

我对所有这些都有点新意,所以对我很轻松。

2 个答案:

答案 0 :(得分:0)

如果您正在谈论Grails,请备份您的UserController并尝试grails generate-controller - 它将为您提供默认操作的完整文本。

我还建议您查看scaffolding chapter - 这是一个很好的开始。

答案 1 :(得分:0)

默认编辑操作应该如下所示(伪代码,它取决于您创建代码的实际域类):

def edit = {
    redirect(action: "show", id: params.id)
    return true

    def <domain>Instance = <DomainClass>.get(params.id)
    if (!<domain>Instance) {
        flash.message = "${message(code: 'default.not.found.message', args: [message(code: '<DomainClass>.label', default: '<DomainClass>'), params.id])}"
        redirect(action: "list")
    }
    else {
        return [<domain>Instance: <domain>Instance]
    }
}

btw:大多数情况下,您不必通过在控制器代码中明确编程来进行安全检查,请为此目的查看Grails Spring Security Plugin