аутентификация на основе ролей с использованием enum - PullRequest
0 голосов
/ 14 февраля 2019

Я создаю приложение для рельсов, где я хочу, чтобы у меня было два типа пользователей - продавцы и покупатели.Пользователи могут выбрать во время регистрации погоду, которую они хотят зарегистрировать как продавца или покупателя.

Я создал пользователей, используя devise, затем добавил enum role: [:seller, :buyer] в user.rb

, а затем создал миграцию, чтобы добавитьРоли для пользователя

rails g migration add_role_to_users

моя миграция выглядит следующим образом:

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

Я использую простую форму, в моем users registration form я добавил

<%= f.select :role, User.roles %>

Вклна индексной странице я пытаюсь сделать это:

<% if current_user.seller? %>
  <%= link_to 'New Post', new_post_path %>
  <% else %>
  hello
<% end %>

но почему-то роли моих пользователей возвращаются как ноль, я также проверил консоль и даже там роли моего пользователя возвращаются как ноль, может кто-тоПожалуйста, помогите мне и скажите мне, что я делаю не так.Благодарю вас

1 Ответ

0 голосов
/ 15 февраля 2019

Ваш код выглядит нормально, если вы запустили rake db:migrate.В консоли роль любого конкретного пользователя возвращает nil, потому что вы еще не сохранили роль ни для одного из них (например, вы должны получить nil при вводе User.last.role в консоли).Но если вы наберете User.last.update_attributes(role: 1), то в выводе User.last вы увидите, что его роль была изменена и теперь buyer.Если это не так, пожалуйста, поделитесь полученной ошибкой.Чтобы заставить его работать при регистрации, вы должны правильно настроить контроллер регистрации, чтобы позволить Devise использовать новый параметр.Вы можете найти всю информацию в этом сообщении .Короче говоря, вы можете сделать это в три этапа:

1 / В вашем файле route.rb:

devise_for :users, controllers: {
       :registrations => "users/registrations" }

2 / В вашем контроллере регистрации:

class Users::RegistrationsController < Devise::RegistrationsController
  before_action :configure_sign_up_params, only: [:create]
  # GET /resource/sign_up
  def new
    super
  end
  #then the method called in the before action where you permit the parameters
  protected
  def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :birth_date, :role, :otherkeysyouneed])
  end
end

3 / в вашей регистрации просмотра

<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= f.select :role, User.roles %>

И вы должны быть отсортированы.Удачи и обратитесь к вышеупомянутому связанному посту и документации Devise, больше информации, если вам нужно.

...