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