2011-01-10 94 views
2

嘿,我希望你能幫助我。如何限制用戶只編輯自己的記錄

我正在使用rails 3和devise gem。
我想找到一種方法讓用戶只編輯他們創建的帖子/評論。
我應該爲此添加CanCan gem還是可以用設計來完成?還是隻有一個簡單的活動記錄查詢可能?

非常感謝。

+0

IMO cancancan是從長遠角度來看的方式。你擁有更多的權力和控制權,但這是以小型學習曲線爲代價的。 – BKSpurgeon 2017-02-14 22:20:17

回答

6

設計會創建一個散列current_user,您可以在控制器,模型和視圖中使用該散列。所以它應該是很容易地創建一個支票確實是這樣的:

@comment = Comment.find(params[:id]) 
if current_user.id == @comment.user.id 
    # yadda 
end 
+1

或`current_user.comments.include?(@ comment)` – Garrett 2011-01-10 00:26:07

+0

我認爲使用這種方法仍然會允許惡意用戶通過編輯url來編輯屬於他人的帖子/評論。 (即.../comments/1/edit)我是否忽略了這是如何防止用戶按照我剛剛描述的方式進行編輯? – Nick 2015-11-09 19:16:40

1

康康舞您的需求有點大材小用,但是這將是一個後來變陣更加靈活。

否則,只需比較user_id和author_id。

+0

謝謝!我會記住CanCan:D – daniel 2011-01-10 00:32:34

10

假設你有UserPost/Comment之間的關係,你可以使用這種關係只取屬於用戶記錄在您的edit行動:

class PostsController < ApplicationController 
    def edit 
    # Instead of this: 
    # Post.find(params[:id]) 
    # Use this: 
    current_user.posts.find(params[:id]) 
    end 
end 

這隻會發現後,如果當前用戶已經創建了它。

當然,您也必須修改update操作。

相關問題