2016-11-04 71 views
0

當創建與像here局部驗證的對象,妖獸需要在URL中的對象ID -Rails的邪惡形式:阻止其他人改變對象的值

http://localhost:3000/pets/1/steps/identity 

這是否意味着,任何人都可以輸入這條路線,並修改數據?

我需要表單被任何人填寫(沒有登錄),但我不希望有任何第三方訪問其他用戶對象。

我只需要創建一個簡單的多步表單,如here,它允許標準的後退和前進按鈕功能。

感謝您的幫助!

回答

0

要解決這個問題,您需要進行某種授權檢查。邪惡形式的寶石不處理那些東西。

嘗試CanCanCan。它非常堅固,代碼乾淨。自述文件很容易遵循,並向您演示如何將檢查添加到每個控制器操作,只允許您選擇編輯的人員。

在你的情況,你會希望Ability類中的以下內容:

can [:new, :create], Pet 
can [:edit, :update], Pet, user: user 

顯示,任何人都可以做一個新的寵物,但你只能加載並提交編輯表單如果寵物是你的。

+0

感謝馬特,但cancancan只能與針對登錄用戶的檢查一起工作嗎? – AndrewJL

+0

不,您可以將它用於未登錄的用戶,只要假設'用戶'爲零,並且不會像上面的第一行代碼那樣使用它。然後創建一個以'if user'開頭的塊,並將登錄用戶放入其中。 –

+0

再次感謝Matt,但我認爲它不會起作用,這種形式永遠不需要由登錄用戶使用。這只是一個標準形式,我希望任何人都可以填寫。 – AndrewJL