0

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

4

2 回答 2

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

您可以在此处阅读有关过滤器的更多信息

于 2013-06-14T15:11:18.453 回答
-2

在控制器中,您应该具有:

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

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

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

它应该工作。

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

于 2013-06-14T15:01:10.637 回答