如何限制用户只编辑他们的记录

时间:2011-01-10 00:19:33

标签: ruby-on-rails ruby-on-rails-3 devise

嘿,我希望你能帮助我。

我正在使用带有设计宝石的rails 3 我试图找到一种方法让用户只编辑他们创建的帖子/评论 我应该为此添加CanCan宝石还是我可以用设计来做?或者只是可以进行简单的Active Record查询吗?

非常感谢。

3 个答案:

答案 0 :(得分: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操作。

答案 1 :(得分:6)

Devise创建一个哈希current_user,您可以在控制器,模型和视图中使用它。因此,创建一个类似这样的检查应该很容易:

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

答案 2 :(得分:1)

CanCan对您的需求有点过分,但对于以后的演变会更灵活。

否则,只需比较user_id和author_id。