我有一个使用Devise进行身份验证的网络应用。这是一个允许用户上传图片的网站,因此网址为/images/2
。有一个单独的图像控制器。
我发现用户可以通过更改网址来编辑他们未上传的图片,例如/images/4/edit
。有没有办法阻止他们编辑其他用户的图像,只允许他们编辑自己的图像?
图像控制器,模型等是使用rails g scaffold
创建的,如果有帮助的话。
答案 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
此外,使用脚手架是一种非常糟糕的做法,您应该编写我们自己的代码,它更简单,更高效,并且会让您了解框架应该如何工作。
您也可以使用嵌套控制器,但您需要进行一些研究,以了解它们的工作原理以及为什么它们可能是更好的解决方案。