Skip to content
Permit store for CanTango, including YAML and Moneta variants
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib
spec
.DS_Store
.gitignore
.rspec
Gemfile
Gemfile.lock
MIT-LICENSE
README.mdown
Rakefile

README.mdown

Permit Store

CanTango is an advanced Access Control (permissions) system for Rails 3. It:

  • extends CanCan and offers a more role oriented design
  • integrates with role and authentication systems in a non-intrusive manner
  • can cache ability rules between requests for increased performance
  • can store abilites in a permission store, including a YAML file, for easy administration
  • works well with multiple user accounts and sub applications
  • supports multiple Devise users

CanTango Store includes:

  • The generic Permit Store API and functionality
  • Permit store engine implementation
  • Permit store implementations for:
    • YAML file
    • Moneta store

Permit Store API

class CanTango::PermitStore::Base
  def load!
  end

  def save! permits
  end
end

The stores included are:

  • CanTango::PermitStore::Yaml
  • CanTango::PermitStore::Moneta

Permit Store Design

The Permit Store loads all the stored permits into a hash, grouped by permit type. Each permit type is parsed using a CanTango::PermitStore::Parser::Permits. This parser creates a permit for each entry in the hash using #parse(key, obj, &blk) If the key in the hash indicates a registered mode, then the rules are wrapped in mode specific rules method in the permit. Otherwise they are wrapped in the default #calc_rules method.

Install

gem install permit_store

Or insert into Gemfile

gem 'permit_store'

Run bundler in a terminal/console from the folder of your Gemfile (root folder of app)

$ bundle

Usage

require 'cantango/permit_store'
require 'cantango/permit_store_engine'

Update Nov 19, 2011

Initial extraction of permit_store related functionality. Needs refactoring and testing! Currently not working. Any help appreciated ;)

Something went wrong with that request. Please try again.