2014-11-14 83 views
0

我很困惑如何在我的視圖和控制器中使用Devise的current_user助手。我是否需要執行遷移以在我的數據庫表中添加user_id?我需要使用會話控制器做些什麼嗎?在Rails4中使用Devise,如何讓用戶只編輯自己的評論?

這裏是我的路線文件:

devise_for :users 

    resources :groups, shallow: true do 
     resources :ideas do 
      resources :comments 
     end 
    end 

登錄/註冊等工作正常。我想讓用戶只編輯他們創建的想法和評論。

我需要在我的應用程序控制器加一個輔助方法,例如:

def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

    helper_method :current_user 

然後,從理論上講,我應該能夠做到以下幾點?

<% if current_user %> 
     <%= link_to 'Edit', edit_idea_path(@idea) %> 
    <% end %> 

然後我還需要我猜我用current_user更新了我的控制器編輯動作?例如。 ?

@comment = current_user.comment.find(params[:id]) 
+1

設計是一個認證系統,而你需要授權邏輯來實現這一點。見https://github.com/CanCanCommunity/cancancan寶石。如果你不想使用額外的寶石,你必須自己實現它。設計只是認證系統。 – blelump 2014-11-14 20:33:55

+0

謝謝,我想我可以使用current_user作爲簡單的授權邏輯。我將使用cancancan,再次感謝所有回覆。 – userden 2014-11-15 06:13:12

回答

2

我認爲你正在試圖做的是:

<% if current_user.id == @idea.user.id %> 
     <%= link_to 'Edit', edit_idea_path(@idea) %> 
    <% end %> 
2
<% if current_user.id == @idea.user.id %> 
    <%= link_to 'Edit', edit_idea_path(@idea) %> 
<% end %> 

還挺工作,但它是關於作爲一個上鎖的門一樣安全。它沒有明確阻止用戶去/idea/5/edit並做出這些改變(即使他們沒有創建/擁有想法5)。如上所述:要麼使用CanCan,要麼在控制器中使用:update方法展示自己的解決方案。

+2

我同意你的看法,這根本不安全,但這是他們遇到的問題。安全是一個不同的動物 – MZaragoza 2014-11-15 02:43:38

相關問題