2015-08-22 21 views
7

Tôi có một ứng dụng đơn giản với hệ thống xác thực từ phát sinh. Tôi đã thử thêm vai trò cho mô hình người dùng. Nhưng không có gì xảy ra.cách thêm vai trò cho người dùng của tôi trong ứng dụng đường ray?

những gì tôi đã làm là tạo mô hình Vai trò và liên kết nó với người dùng mẫu:

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

(theo chỉ dẫn của wiki devise)

Sau đó, trong mô hình của tôi:

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

Thiết lập hạt giống.rb wit h vai trò của tôi:

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

Sau đó

$ rake db:seed 

Đó là tất cả. Và tôi cũng muốn biết làm thế nào để làm cho người dùng chọn bất kỳ của các vai trò tại thời điểm đăng ký

Trả lời

12

Trước hết, thay vì sử dụng một hiệp hội, bạn có thể sử dụng enum trong lớp người dùng của bạn:

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

    ... 
end 

Bạn sẽ cần di chuyển để thêm cột role (số nguyên) vào bảng của người dùng.

Trong terminal của bạn:

rails g migration add_role_to_users 

Sau đó chỉnh sửa các tập tin chuyển đổi:

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

Sau đó, bạn có thể ví dụ sử dụng SimpleForm gem để cho phép người dùng chọn/vai trò của mình khi đăng ký:

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

Nhưng SimpleForm cũng tốt với các hiệp hội:

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

Có nhiều ví dụ cho các hiệp hội here.

+0

hey @zhurora xin lỗi vì câu hỏi ngu ngốc này nhưng bạn có thể yêu cầu tôi cho tôi biết di chuyển nào cần tôi –

+0

Tôi đã thêm di chuyển. Vui lòng chỉnh sửa câu trả lời, khi bạn tìm thấy bất kỳ lỗi nào trong khi sử dụng nó, vì tôi chưa kiểm tra mã của mình. – zhurora

+0

Hey @zhurora cảm ơn bạn rất nhiều điều đã làm việc hoàn hảo nhưng có một vấn đề khi tôi kiểm tra giao diện điều khiển của tôi nói rằng id vai trò là nil tôi muốn sử dụng cancancan bây giờ và cho rằng tôi phải liên kết id vai trò với người dùng u có thể giúp Tôi –

1

Trong khi bạn có thể thêm vai trò vào ứng dụng của mình như cách bạn đã làm. Nhưng, nó sẽ là rất nhiều công việc để xử lý tất cả các loại vai trò và trách nhiệm của họ. Ngoài ra, Có một số đá quý đẹp như punditcancan có thể được sử dụng để xử lý ủy quyền cho người dùng ứng dụng của bạn. Chúng rất dễ tích hợp với ứng dụng Rails của bạn và hoạt động độc đáo với đá quý xác thực devise mà bạn đang sử dụng.

Đây là số video tutorial đẹp cho thấy Rails Authorization with Pundit.

Các vấn đề liên quan