ryanb / trusted-params

Rails plugin for overriding attr_accessible protection.

This URL has Read+Write access

name age message
file LICENSE Mon Jun 01 09:46:33 -0700 2009 initial import [ryanb]
file README.rdoc Mon Jun 01 13:37:06 -0700 2009 adding links to beginning of readme [ryanb]
file Rakefile Mon Jun 01 11:10:36 -0700 2009 rename rake file so it doesn't include tasks in... [ryanb]
file init.rb Mon Jun 01 11:36:52 -0700 2009 using alias method chain so method override hap... [ryanb]
directory lib/ Mon Jun 01 13:10:31 -0700 2009 inherit global trust for all nested hashes [ryanb]
directory spec/ Mon Jun 01 13:10:31 -0700 2009 inherit global trust for all nested hashes [ryanb]
directory tasks/ Mon Jun 01 11:10:36 -0700 2009 rename rake file so it doesn't include tasks in... [ryanb]
README.rdoc

Trusted Params

Rails plugin which adds a convenient way to override attr_accessible protection.

If you are unfamiliar with the dangers of mass assignment please check these links

Install

You can install this as a plugin into your Rails app.

  script/plugin install git://github.com/ryanb/trusted-params.git

Features

This plugin does several things.

  • Adds "trust" method on hash to bypass attribute protection
  • Disables attr_protected because you should use attr_accessible.
  • Requires attr_accessible be specified in every model
  • Adds :all as option to attr_accessible to allow all attributes to be mass-assignable
  • Raises an exception when assigning a protected attribute (instead of just a log message)

Usage

When using this plugin, you must define attr_accessible in every model to allow mass assignment. You can use :all to mark all attributes as accessible.

  class Comment < ActiveRecord::Base
    attr_accessible :all
  end

However, only do this if you want all attributes accessible to the public. Many times you will want to limit what the general public can set.

  class Comment < ActiveRecord::Base
    attr_accessible :author_name, :email, :content
  end

Administrators should be able to bypass the protected attributes and set anything. This can be done with the "trust" method.

  def create
    params[:comment].trust if admin?
    @comment = Comment.new(params[:comment])
    # ...
  end

You can mark certain attributes as trusted for different roles

  params[:comment].trust(:spam, :important) if moderator?

Then only those attributes will be allowed to bypass mass assignment.