= rolify {
}[http://travis-ci.org/EppO/rolify]
Very simple Roles library without any authorization enforcement supporting scope on resource object.
Let's see an example:
user.has_role?("moderator", Forum.first)
=> false # if user is moderator of another Forum
This library was intended to be used with CanCan[https://github.com/ryanb/cancan] and devise[https://github.com/plataformatec/devise/] but should be generic enough to be used by any other authentication/authorization solutions.
== Requirements
* >= Rails 3.1
* ActiveRecord ORM
* ruby 1.9 (JRuby and Rubinius support on going)
== Installation
In Rails 3, add this to your Gemfile and run the +bundle+ command.
gem "rolify"
Alternatively, you can install it as a plugin.
rails plugin install git://github.com/EppO/rolify.git
== Getting Started
=== 1. Generate Role Model
First, create your Role model and migration file using this generator:
rails g rolify:role Role User
Role and User classes are the default. You can specify any Role class name you want. This is completly a new file so any name can do the job.
For the User class name, you would probably use the one provided by your authentication solution. rolify just adds some class methods in an existing User class.
=== 2. Run the migration
Let's migrate !
rake db:migrate
=== 3. Add a role to a user
To define a global role:
user = User.find(1)
user.has_role "admin"
To define a role scoped to a resource instance
user = User.find(2)
user.has_role "moderator", Forum.first
To define a role scoped to a resource class
user = User.find(3)
user.has_role "moderator", Forum
That's it !
=== 4. Check roles
To check if a user has a global role:
user = User.find(1)
user.has_role "admin" # sets a global role
user.has_role? "admin"
=> true
To check if a user has a role scoped to a resource instance:
user = User.find(2)
user.has_role "moderator", Forum.first # sets a role scoped to a resource instance
user.has_role? "moderator", Forum.first
=> true
user.has_role? "moderator", Forum.last
=> false
To check if a user has a role scoped to a resource class:
user = User.find(3)
user.has_role "moderator", Forum # sets a role scoped to a resource class
user.has_role? "moderator", Forum
=> true
user.has_role? "moderator", Forum.first
=> true
user.has_role? "moderator", Forum.last
=> true
A global role overrides resource role request:
user = User.find(4)
user.has_role "moderator" # sets a global role
user.has_role? "moderator", Forum.first
=> true
user.has_role? "moderator", Forum.last
=> true
Please see on {the wiki}[https://github.com/EppO/rolify/wiki/Usage] for all the available commands and the {Tutorial}[https://github.com/EppO/rolify/wiki/Tutorial] to understand how to use {rolify}[http://eppo.github.com/rolify] with {Devise}[https://github.com/plataformatec/devise] and {CanCan}[https://github.com/ryanb/cancan].
== Questions or Problems?
If you have any issue or feature request with/for rolify, please add an {issue on GitHub}[https://github.com/EppO/rolify/issues] or fork the project and send a pull request.