In Rails 3, add this to your Gemfile and run the +bundle+ command.
In /Gemfile,
gem 'rolify' gem 'cancan'
$ bundle install
Step 2: Generate Role Model
First, create your Role model and migration file using this generator:
$ rails g rolify 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.
Step 3: Run the migration (only required when using ActiveRecord)
Let's migrate!
$ rake db:migrate
Step 4: Configure your resource models
In the resource models you want to apply roles on, just add resourcify method. For example, on this ActiveRecord class:
In /app/models/post.rb,
class Post < ActiveRecord::Base resourcify //the other association... end
Step 5: Adding Associations to Role and User Models
In /app/models/user.rb,
class User < ActiveRecord::Base rolify devise :database_authenticatable, :registerable, :rememberable, :trackable, :validatable attr_accessible :email, :password, :password_confirmation, :remember_me attr_accessor :current_role end
Step 6: Define Abilities
User permissions are defined in an Ability class. CanCan 1.5 includes a Rails 3 generator for creating this class.
$ rails g cancan:ability
Step 7: Define Roles and Abilities using Cancan
In /app/models/ability.rb,
class Ability include CanCan::Ability def initialize(user) user ||= User.new # This is used for not logged user if you have a need for it if user.has_role? :blog_owner can :manage, :all else if user.has_role? :writer can :create, Post can :read, Post can :update, Post can :delete_tags, Post can :delete_labels, Post cannot :destroy, Post can :create, Comment can :destroy, Comment can :manage, Tag cannot :manage, Author end can :read, :all can :add_favourite, Post can :delete_favourite, Post end end end
In /app/models/role.rb,
class Role < ActiveRecord::Base attr_accessible :name end
Step 8: Populating the Database with seeds.rb
In /db/seeds.rb,
Author.create([{ name: 'Joseph' }, { name: 'Dhendy' }, { name: 'Kirby' }]) Role.create([{ name: 'blog_owner' }, { name: 'writer' }]) user = User.create(email: 'owner@kirby.com', password: '1234567890') user.add_role :blog_owner user = User.create(email: 'writer@kirby.com', password: '1234567890') user.add_role :writer
$ rake db:seed
EppO/rolify · GitHub
ryanb/cancan · GitHub
Return to Internship Note (LoanStreet)
Previous Episode: CarrierWave File Uploads
Next Episode: Create User Profile Rails App
0 comments:
Post a Comment