Skip to content

Latest commit

 

History

History
74 lines (53 loc) · 2.78 KB

File metadata and controls

74 lines (53 loc) · 2.78 KB

The attr_readable Plugin for Ruby on Rails let’s you define and control read access to individual attributes of an ActiveRecord.

The attr_readable plugin’s design goal is to provide a mechanism for role-based authorizing access to individual attributes of an ActiveRecord, where the mechanism closely resembles the interface of the mass-assignment access control provided by Rails.

The exepression attr_readable can be used inside the class defintion of an ActiveRecord to provide a list of readable attributes. The list can be appended with a specification of the role that should be granted read access:

attr_readable :attribute_1, :attribute_2, :as => :user

Arbitrary symbols area accetable as roles. If no role is provided, then :default is used.

attr_readable :attribute   # same as using :as => :default

It’s possible to set attribute accessibility for several roles at once by passing several role-symbols in an array.

class Model < ActiveRecord::Base
  attr_readable :id, :name, :as => [ :default, :user, :admin ]
end

would have the same result as

class Model < ActiveRecord::Base
  attr_readable :id, :name, :as => :default
  attr_readable :id, :name, :as => :user
  attr_readable :id, :name, :as => :admin 
end

In both the above examples only the attributes :id and :name are marked as readable for the three specified roles. Please note, an unkown role has access to no attributes by default.

You can access the list of attributes readable by a apecific role using the accessor method readable_attributes(role).

Model.readable_attributes(:admin)        # => [ :id, :name ]
Model.readable_attributes(:other_role)   # => [ ]

Besides this mechanism to manage a list of readable attributes for several roles, the module provides several methods for sanitizing instances of the ActiveRecord according to the specified rules. Most important is the instance method #sanitized_hash(role) that returns a hash of only the readable attributes and their values for a given role.

Examples:

instance = Model.create( :name => 'a_name', :other_attribute => 'a_value' )
instance.sanitized_hash(:admin)        # => { :id => 1, :name => 'a_name' }
instance.sanitized_hash(:other_role)   # => { }

The module also provides two more class methods for sanitation:

  • sanitized_hash_from_model - Returns a sanitized hash for the specified instance of the model.

  • sanitized_hash_from_hash - Returns a sanitzized hash created from the specified hash according to the readable attributes of the model.

Just call

rails plugin install git://github.com/wackadoo/attr_readable.git

inside your rails project. The plugin will be placed in vendor/plugins/ .

Copyright © 2011 Sascha Lange, released under MIT license