2011-01-10 32 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操作。

相关问题