创建grails过滤器以限制访问操作

时间:2013-10-10 04:36:37

标签: grails

背景
我正在创建一个电子商务控制器,有订阅计划注册。

  • 第1步:用户选择计划。
  • 第2步:然后输入他们的信用卡信息。

这些操作驻留在一个控制器中,该控制器也将具有诸如

之类的操作
  • 修改信用卡信息
  • 更改订阅计划
  • 取消计划等。

问题陈述:
我想重定向控制器中的所有操作,但选择一个计划,如果用户尚未选择计划。

示例:
在用户界面中,用户将看到其结算信息和订阅设置的链接,但如果他们点击这些链接并且他们没有选择计划,则会将其重定向到操作/页面以选择计划。

问题

  • 过滤器是处理该场景的最佳位置,如果是,它将如何编码?
  • 除了使用过滤器之外还有更好的方法吗?

我不想要的是在每个操作的开头放置一个if语句,用于检查用户是否有计划,以及他们是否不将它们重定向到pick-a-plan页面。似乎会有更好的方式。

1 个答案:

答案 0 :(得分:1)

我认为在这种情况下,过滤器可以很容易地完成工作。 类似于以下过滤器的过滤器应该可以解决这个问题:

class MyFilter{
    exceptPlan(controller:'myController',action:'pickPlan', invert:true){
        before = {
              if (!session.plan){
                   redirect action:'pickPlan'
                   return false
              }
        }
    }
}