轨道4质量分配白名单参数管理员用户(Rails 4 Mass Assignment Whitelis

2019-10-19 10:41发布

我一直在寻找周围,想看看我会怎样处理大规模分配使用Rails 4.我知道这个问题已经被殴打致死,但是从我的搜索,我只穿过那些需要protected_attributes宝石和attr_accessible答案。 现在,我不知道这还是在这个行业标准,所以我想问问。

我使用Rails 4.0.1,我试图找出如何限制特定参数的更新,只管理员帐户。

下面是参数:标题,:摘要:内容:状态

现在,当用户创建后,他们只能更新以下属性:标题,:总结,:内容

但是,如果管理员更新后,他们能够更新:标题,:摘要:内容和:状态

post_controller.rb

  def create
    @post = Post.new(post_params)
    @post.status = 'pending'

    respond_to do |format|
      if @post.save
        PostMailer.new_post(@post).deliver
        format.html { redirect_to @post, notice: 'Post was successfully submitted.' }
        format.json { render action: 'show', status: :created, location: @post }
      else
        format.html { render action: 'new' }
        format.json { render json: @post.errors, status: :unprocessable_entity }
      end
    end
  end

  def update
    @categories = Category.all    
    respond_to do |format|
      @post.slug = nil
      if params[:post][:featured]
        @image = Imgurruby::Imgur.new('20e2a9ef8542b15873a0dfa7502df0b5')
        @image.upload(params[:post][:featured])
        params[:post][:featured] = @image.url.to_s
      end      
      if @post.update(post_params)
        expire_fragment(@post)
        @post.friendly_id
        format.html { redirect_to @post, notice: 'Post was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @post.errors, status: :unprocessable_entity }
      end
    end
  end

  def post_params
    params.require(:post).permit(:title, :summary, :category, :tags, :content, :user_id, :category_id, :slug, :featured, :views)
  end

我是正确的假设,最好的办法是使用运营商的post_params方法来检查,如果用户是管理员,如果是这样,允许不同的参数?

Answer 1:

当然,你可以使用不同的设置为不同的用户或不同的操作参数。 你会做这样的事情:

def update
  if user.is_a? Admin
    @post.update(post_params_admin)
   else
    @post.update(post_params_user)
  end

end

def post_params_user
   params.require(:post).permit(:title, :summary, :category, :content)
end

def post_params_admin
   params.require(:post).permit(:title, :summary, :category, :tags, :content, :user_id, :category_id, :slug, :featured, :views)
end


文章来源: Rails 4 Mass Assignment Whitelisting Parameters for Admin User