2015-08-22 6 views
7

Ich habe eine einfache App mit einem Authentifizierungssystem von Devise. Ich habe versucht, dem Benutzermodell Rollen hinzuzufügen. Aber nichts passiert.Wie kann ich meinen Nutzern in der App "rails" Rollen hinzufügen?

, was ich tat, war das Rollenmodell erstellt und verknüpfen es mit dem Benutzermodell:

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

(wie durch die devise Wiki gerichtet)

Dann in meiner Models:

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

Einrichten samen.rb wit h meine Rollen:

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

Dann

$ rake db:seed 

Das ist alles. Und ich möchte auch wissen, wie der Benutzer zum Zeitpunkt der Anmeldung

Antwort

12

Zunächst einmal jeden dieser Rollen wählte zu machen, anstatt eine Verbindung zu verwenden, können Sie enum in Ihrer Benutzerklasse verwenden:

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

    ... 
end 

Sie müssen eine Migration durchführen, um eine (Integer) -Spalte in die Tabelle Ihres Benutzers einzufügen.

In Ihrem Terminal:

rails g migration add_role_to_users 

dann die Migrationsdatei bearbeiten:

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

Dann können Sie zum Beispiel Verwenden Sie die SimpleForm gem der Nutzer entscheiden, seine/ihre Rolle nach oben bei der Anmeldung zu lassen:

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

Aber Simpleform ist auch gut mit den Verbänden:

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

Es gibt weitere Beispiele für Vereine here.

+0

hey @zhurora Entschuldigung für diese dumme Frage, aber können Sie mir bitte sagen, welche Migration brauche ich –

+0

Ich habe die Migration hinzugefügt. Fühlen Sie sich frei, die Antwort zu bearbeiten, wenn Sie Fehler bei der Verwendung finden, da ich meinen Code nicht überprüft habe. – zhurora

+0

Hey @zhurora danke sehr alles, was gerade perfekt funktioniert, aber es gibt ein Problem, als ich überprüft meine Konsole sagen, dass Rolle ID ist nil ich möchte cancancan jetzt verwenden und dafür habe ich Rolle ID mit Benutzer können Sie helfen me –

1

Während Sie Ihrer Anwendung Rollen hinzufügen können, so wie Sie es getan haben. Aber es wäre eine Menge Arbeit, alle Arten von Rollen und ihre Verantwortlichkeiten zu bewältigen. Auch, Es gibt einige nette Edelsteine ​​wie pundit und cancan, die verwendet werden können, um die Berechtigung für Ihre Anwendungsbenutzer zu behandeln. Sie lassen sich sehr einfach in Ihre Rails-Anwendung integrieren und funktionieren gut mit der Authentifikation gem devise, die Sie bereits verwenden.

Hier ist eine nette video tutorial, die Rails Authorization mit Pundit zeigt.