Hi friends,
Whenever we create an application, there is always a case where we want to have different kind of users who needs to login into the app but they have different access rights, so that some functionalities are hidden for some users and some can have access to them. In rails we have different kinds of gems available that are used for making these functionalities in easy way. Here I am going to discuss few of them.
 
1. devise gem:  Used for authentication and login
2. rolify gem:  Used for creating different kinds of roles and assigning them to users
3. cancancan gem:  Used for defining abilities and access to users with different kinds of roles
Now we will discuss how we can use them:
1. Add these gems to Gemfile
   gem "rolify"
   gem "devise"
   gem "cancan"
2. Now run bundle
   bundle install
3. Now run devise command
   rails generate devise:install
   
   ## this will create these files
   create  config/initializers/devise.rb
   create  config/locales/devise.en.yml
4. Create the user model using devise
   rails generate devise User
   
   ## this will create these files
   invoke  active_record
   create    db/migrate/20160507180200_devise_create_users.rb
   create    app/models/user.rb
   invoke    test_unit
   create      test/models/user_test.rb
   create      test/fixtures/users.yml
   insert    app/models/user.rb
   route  devise_for :users
5. For creating roles for users we need to use rolify
   rails generate rolify Role User
   
   ## this will create these files
   invoke  active_record
   create    app/models/role.rb
   invoke    test_unit
   create      test/models/role_test.rb
   create      test/fixtures/roles.yml
   insert    app/models/role.rb
   create    db/migrate/20160507180239_rolify_create_roles.rb
   insert  app/models/user.rb
   create  config/initializers/rolify.rb
6. Now define the abilities we need to create ability class using cancan
   rails generate cancan:ability
   ## this will create these files
   create  app/models/ability.rb
7. Now run migrations to create these tables like role, users etc
   rake db:migrate
8. Now for configuring devise you can go through the following link.
https://github.com/plataformatec/devise
9. Now you can create roles and assign to them using rolify gem. you can use these roles like
  user = User.find(1)
  ## For adding role 
  user.add_role :admin
  ## For checking whether a user has some role
  user.has_role? :admin
  ## For removing role from a user
  user.remove_role :admin
Sometimes on adding roles to a user you will get error, for solving that error, you need to remove this line from the role.rb
   :optional => true
For more info regarding rolify you can go to this link.
https://github.com/RolifyCommunity/rolify
10. Now at last for defining abilities, you can set it in ability.rb file. Like this
    if user.has_role? :admin
      can :manage, :all
    else
      can :read, :all
    end  
For more info regarding cancan you can go to this link.
https://github.com/CanCanCommunity/cancancan
Hope you liked this blog.
                       
                    
2 Comment(s)