Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Roles for Active Record implementing the Roles generic API

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
config
lib
sandbox
spec
tmp/rails
.document
.gitignore
.rspec
Gemfile
LICENSE
README.markdown
Rakefile
VERSION
development.sqlite3
logging.log
roles_active_record.gemspec

README.markdown

Roles for Active Record

An Active Record implementation of roles generic

Install

gem install roles_active_record

Update!

Now implements the roles generic Roles API It also implements the following Role strategies:

  • admin_flag
  • many_roles
  • one_role
  • roles_mask
  • role_string

Rails generator

Will create admin and guest roles by default

$ rails g active_record:roles User --strategy admin_flag --roles admin guest

Usage

Example: admin_flag Role strategy - generate migrations and model files

$ rails g active_record:roles User admin_flag

Example: admin_flag Role strategy - generate migrations only

$ rails g active_record:roles_migration User admin_flag

Role strategies

The library comes with the following role strategies built-in:

Single role:

  • admin_flag
  • role_string
  • one_role

Multi role:

  • many_roles
  • roles_mask

Note The strategies one_role and many_roles both use a separate Role model (roles table). The others use an inline strategy with an attribute in the User model.

Admin flag

Boolean admin_flag on User to indicate if user role is admin or normal user

Role string

String role_string on User that names the role

One role

role_id relation to id of Roles table that contain all valid roles

Many roles

role_id relation to UserRoles table that is the join table that joins a user to multiple roles in the Roles tables.

Roles mask

roles_mask integer that as a bitmask indicating which roles out of a set of valid roles that the user has.

Note: The following examples use RSpec to demonstrate usage scenarios.

Example : admin_flag

use_roles_strategy :admin_flag

class User < ActiveRecord::Base    
  include Roles::ActiveRecord 
    
  strategy :admin_flag, :default
  valid_roles_are :admin, :guest
end

Example : role_string

use_roles_strategy :role_string

class User < ActiveRecord::Base
  include Roles::ActiveRecord 
  
  strategy :role_string, :default
  valid_roles_are :admin, :guest   
end

Example : one_role

use_roles_strategy :one_role
class User < ActiveRecord::Base
  include Roles::ActiveRecord 

  strategy :one_role, :default
  role_class :role

  valid_roles_are :admin, :guest
end

Example : many_roles

use_roles_strategy :many_roles
class User < ActiveRecord::Base    
  include Roles::ActiveRecord

  strategy :many_roles, :default
  role_class :role

  valid_roles_are :admin, :guest
end

Example : roles_mask

use_roles_strategy :roles_mask

class User < ActiveRecord::Base    
  include Roles::ActiveRecord
  
  strategy :roles_mask, :default
  valid_roles_are :admin, :guest   
end

Rails generators

The library comes with a Rails 3 generator that lets you populate a user model with a given role strategy The following role strategies are included by default. Add your own by adding extra files inside the strategy folder, one file for each role strategy is recommended.

  • admin_flag
  • role_string
  • roles_mask
  • one_role
  • many_roles

Generators

  • active_record:roles
  • active_record:roles_migration

Roles

Apply :admin_flag Role strategy to User model using default roles :admin and :guest (default)

$ rails g active_record:roles User --strategy admin_flag

Apply :admin_flag Role strategy to User model using default roles and extra role :author

$ rails g active_record:roles_migration User --strategy admin_flag --roles author

Apply :one_role Role strategy to User model without default roles, only with roles :user, :special and :editor

$ rails g active_record:roles_migration User --strategy one_role --roles user special editor --no-default-roles

Roles Migration

Example: admin_flag Role strategy - generate migrations and model files

$ rails g active_record:roles_migration User --strategy admin_flag

Create reverse migration

$ rails g active_record:roles_migration User --strategy admin_flag --reverse

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don't break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2010 Kristian Mandrup. See LICENSE for details.

Something went wrong with that request. Please try again.