我想知道在我的控制器中是否有最好的方法来实现这种方式:
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
我在我的应用程序中有几个这样的验证,我可以清楚地看到它很容易错过一个并且可以访问你不应该访问的内容!
由于
答案 0 :(得分:1)
这不是Rails方式。其中一个rails原则是对Model层进行所有对象操作。控制器主要关注整体授权/身份验证/缓存失效/ 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
答案 1 :(得分:1)
老实说,我会使用CanCan。
can :read, Article, public: true
can :manage, Article, owner_id: user.id