how to add roles to my users in rails app?

后端 未结 2 1347
孤城傲影
孤城傲影 2021-02-03 12:53

I have a simple app with an authentication system from devise. I tried adding roles to the user model. But nothing happens.

what i did was created the Role model

相关标签:
2条回答
  • First of all, instead of using an association, you can use enum in your user class:

    class User < ActiveRecord:Base
       enum role: {seller: 0, buyer: 1, admin: 2}
    
       ... 
    end
    

    You'll need a migration to add a role (integer) column into your user's table.

    In your terminal:

    rails g migration add_role_to_users
    

    Then edit the migration file:

    class AddRoleToUsers < ActiveRecord::Migration
       def change
          add_column :users, :role, :integer
       end
    end
    

    Then you can e.g. use the SimpleForm gem to let the user choose his/her role during sign up:

    <%=  simple_for for @user do |f| %>
       ...
       <%= f.select :role, collection: User.roles.keys.to_a %>
       ... 
    <% end %> 
    

    But SimpleForm is also good with associations:

    <%= f.association :role, as: :radio_buttons %>
    

    There are more examples for associations here.

    0 讨论(0)
  • 2021-02-03 13:41

    While you can add roles to your application like the way you did. But, it would be a lot of work to handle all types of roles and their responsibilities. Also, There are several nice gems like pundit and cancan which can be used to handle the authorization for your application users. They're very easy to integrate with your Rails application and works nicely with authentication gem devise which you are already using.

    Here is a nice video tutorial which shows Rails Authorization with Pundit.

    0 讨论(0)
提交回复
热议问题