CanField

CanCan provides only model-level permissions. This gem adds field-based permissions to CanCan using strong_parameters gem.
Warning! Currently gem doesn't support any nested logic!
Installation
Add this line to your application's Gemfile:
gem 'can_field'
And then execute:
$ bundle
Or install it yourself as:
$ gem install can_field
Usage
ability.rb
Now you have new method for you ability.rb file.
canf(actions, target, fields)
# example usage
canf :update, Book, [:title, :desription]
canf [:create, :update], Shelf, [:position]
This method invoke standart can method with give actions and targer and generate some additional rules for restrict field access (:_cf_action_fl_field as example).
In controller
There is a contrller class method that provides integration with load_and_authorize_resource. Just add permit_can_field_constraints right after load_and_authorize_resource call. Like this:
class BooksController < ApplicationController
permit_can_field_constraints
...
end
Helpers
In controller and views you can use helpers canf? and allowed_fields_for:
allowed_fields_for(action, subject) # return list of available fields or [:all] if no restrictions
allowed_fields_for :create, Book # as example
canf?(action, subject, field) # like can? but look for field restrictions
canf? :update, Book, :title # as example
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request