Rails 3.1拒绝编辑其他用户图像

时间:2011-10-30 15:27:02

标签: ruby-on-rails ruby-on-rails-3 authentication ruby-on-rails-3.1

我有一个使用Devise进行身份验证的网络应用。这是一个允许用户上传图片的网站,因此网址为/images/2。有一个单独的图像控制器。

我发现用户可以通过更改网址来编辑他们未上传的图片,例如/images/4/edit。有没有办法阻止他们编辑其他用户的图像,只允许他们编辑自己的图像?

图像控制器,模型等是使用rails g scaffold创建的,如果有帮助的话。

1 个答案:

答案 0 :(得分:3)

对此有许多不同的解决方案,但最简单的是在运行edit / update / destroy时从当前用户而不是从所有图像加载图像:

def edit
  @image = current_user.images.find( params[:id] )
end

def update
  @image = current_user.images.find( params[:id] )
  # do whatever has to be done
end

def destroy
  @image = current_user.images.find( params[:id] )
  # do whatever has to be done
end

此外,使用脚手架是一种非常糟糕的做法,您应该编写我们自己的代码,它更简单,更高效,并且会让您了解框架应该如何工作。

您也可以使用嵌套控制器,但您需要进行一些研究,以了解它们的工作原理以及为什么它们可能是更好的解决方案。