2013-10-10 35 views
0

背景:
我正在創建一個訂閱計劃的電子商務控制器,用於註冊。創建Grails過濾器來限制訪問操作

  • 步驟1:用戶選擇一個計劃。
  • 步驟2:然後輸入他們的信用卡信息。

這些行動駐留在一個控制器,並且該控制器還具有如

  • 編輯信用卡信息
  • 行動改變他們的預訂計劃
  • 取消計劃等

問題描述:
我想重定向控制器中的所有操作,但除外如果用戶尚未選擇計劃,則選擇一個計劃。

例子:
在UI用戶將看到他們的帳單信息和訂閱設置鏈接,但如果他們點擊這些鏈接,他們沒有計劃採摘但他們重定向到的動作/頁面選擇一個計劃。

問題

  • 是一個過濾器來處理場景的最佳場所,如果是的話會是怎樣編碼?
  • 除了使用過濾器之外,還有更好的方法嗎?

我不想要的是在每個動作的開始處放置一個if語句,用於檢查用戶是否有計劃,並且他們是否將它們重定向到選擇計劃頁面。似乎會有更好的方法。

+0

如果用戶沒有「計劃」,他/她將不會被允許「編輯信用卡信息」呢? – dmahapatro

回答

1

我認爲在這種情況下,Filter可以很輕鬆地完成工作。

類似於過濾器下面的人應該做的伎倆:

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

另一種使用** WebFlow **的方法 –