Ruby on rails 控制器中的Rails安全验证?
我想知道在我的控制器中是否有实现这一目标的最佳方法:Ruby on rails 控制器中的Rails安全验证?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我想知道在我的控制器中是否有实现这一目标的最佳方法: def show @article = Article.find(params[:id]) # you can only view a public article or your own articles. @article = nil unless @article.public? || @article.owner?(current_user) end def edit @article = Article.find(
def show
@article = Article.find(params[:id])
# you can only view a public article or your own articles.
@article = nil unless @article.public? || @article.owner?(current_user)
end
def edit
@article = Article.find(params[:id])
# you can only edit your own articles
@article = nil unless @article.owner?(current_user)
end
我在我的应用程序中有几个类似的验证,我可以清楚地看到,很容易错过一个,并允许访问您不应该访问的内容
谢谢这不是铁路。rails的原则之一是在模型层上执行所有对象操作。控制器主要关心总体授权/身份验证/缓存失效/cookie和会话设置 您可以使用关联和范围
class ArticlesControllers << ApplicationsController
def show
@article = current_user.articles.public.find(params[:id])
end
end
class Article < ActiveRecord::Base
scope :public, :where('public').is('true')
end
class-articlescontroller老实说,我会使用
这不是我想要的,但这是一个开始。这是一种更好的方法,但它会让我获得我自己的和公共的文章,我想要的是一篇公共文章或我自己的文章。也许像“article.PUBLIC.find(params[:id])| | current_user.articles.find(params[:id])这样的东西会起作用吗?你最好将它包装到模型的方法中。将当前用户作为参数传递,并将条件表达式移动到方法中
can :read, Article, public: true
can :manage, Article, owner_id: user.id