禁止用户查看其他帖子

时间:2013-06-14 14:57:55

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

我有一个页面显示了另一个用户发布的帖子,而且我能够做到这一点,如果你去索引,它只显示当前用户user_id的user_id =的帖子。但是,如果我转到网址并更改帖子号码,我可以看到其他用户发帖甚至编辑它们。我尝试更改控制器显示@time_sheets = TimeSheet.where(:user_id => current_user.id)find(params[:id])并尝试在视图中使用<% if @time_sheet.user_id == @currentuser.id %>,但似乎都不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:2)

如果用户尝试访问其他用户的网页,您可以使用before_filter并将用户重定向到主页并显示错误消息。

before_filter :validate_user

def validate_user
  timesheet_user_id = Timesheet.find(params[:id]).user_id
  redirect_to :root, :alert => "Unauthorized" unless timesheet_user_id == current_user.id
end

您可以阅读有关过滤器here

的更多信息

答案 1 :(得分:-2)

在控制器中,您应该:

@time_sheet = TimeSheet.where(user_id: current_user.id).find(params[:id])

或者,如果您有关联用户has_many时间表:

@time_sheet = current_user.time_sheets.find(params[:id])

它应该有用。

顺便说一句,你当然应该在调用这段代码之前检查是否有人登录。