如何在rails app中为我的用户添加角色?

时间:2015-08-22 17:21:07

标签: ruby-on-rails devise authorization roles

我有一个简单的应用程序,带有来自设计的身份验证系统。我尝试将角色添加到用户模型中。但没有任何反应。

我做的是什么 创建了角色模型并将其链接到用户模型:

$ rails g model Role name:string
$ rails g migration addRoleIdToUser role:references
$ rake db:migrate

(按照设计维基的指示)

然后在我的模特中:

class User < ActiveRecord::Base
  belongs_to :role
end
class Role < ActiveRecord::Base
  has_many :users
end

使用我的角色设置seeds.rb:

['seller', 'buyer', 'admin'].each do |role|
  Role.find_or_create_by({name: role})
end

,然后

$ rake db:seed

这就是全部。我还想知道如何让用户在注册时选择任何这些角色

2 个答案:

答案 0 :(得分:13)

首先,您可以在用户类中使用enum,而不是使用关联:

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

   ... 
end

您需要迁移才能将role(整数)列添加到用户的表格中。

在您的终端中:

rails g migration add_role_to_users

然后编辑迁移文件:

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

然后你可以,例如使用SimpleForm gem让用户在注册时选择自己的角色:

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

但SimpleForm对关联也很好:

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

关联here还有更多示例。

答案 1 :(得分:1)

虽然您可以像处理方式一样为应用程序添加角色。但是,处理所有类型的角色及其职责需要做很多工作。也, 有几个不错的宝石,如punditcancan,可用于处理应用程序用户的授权。它们非常容易与您的Rails应用程序集成,并且可以与您已经使用的身份验证gem devise很好地协作。

这是一个很好的video tutorial,它显示了Pundit的Rails授权。