【问题标题】:Rails 3.1 Deny editing other users imagesRails 3.1 拒绝编辑其他用户图像
【发布时间】:2011-10-31 00:15:02
【问题描述】:
我有一个使用 Devise 进行身份验证的网络应用程序。这是一个允许用户上传图片的网站,因此 URL 为/images/2。有一个单独的图像控制器。
我发现用户可以通过更改 URL 来编辑他们未上传的图像,例如/images/4/edit。有没有办法阻止他们编辑其他用户的图片,只允许他们编辑自己的图片?
如果有帮助,图像控制器、模型等是使用 rails g scaffold 创建的。
【问题讨论】:
标签:
ruby-on-rails
ruby-on-rails-3
authentication
ruby-on-rails-3.1
【解决方案1】:
对此有许多不同的解决方案,但最简单的是在运行编辑/更新/销毁时从当前用户而不是所有图像加载图像:
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
此外,使用脚手架是一种非常糟糕的做法,您应该只编写我们自己的代码,它更简单、更有效率,并且会引导您了解框架应该如何工作。
您也可以为此使用嵌套控制器,但您必须进行一些研究以了解它们的工作原理以及为什么它们可能是更好的解决方案。